Skip to content
  • Thomas Haller's avatar
    core: track devices in manager via embedded CList · 4a705e1a
    Thomas Haller authored
    Instead of using a GSList for tracking the devices, use a CList.
    I think a CList is in most cases the more suitable data structure
    then GSList:
    
     - you can find out in O(1) whether the object is linked. That
       is nice, for example to assert in NMDevice's destructor that
       the object was unlinked, and we will use that later in
       nm_manager_get_device_by_path().
     - you can unlink the element in O(1) and you can unlink the
       element without having access to the link's head
     - Contrary to GSList, this does not require an extra slice
       allocation for the link node. It quite possibliy consumes
       slightly less memory because the CList structure is embedded
       in a struct that we already allocate. Even if slice allocation
       would be perfect to only consume 2*sizeof(gpointer) for the link
       note, it would at most be as-good as CList. Quite possibly,
       there is an overhead though.
     - CList possibly has better memory locality, because the link
       structure and the data are close to each other.
    
    Something which could be seen as disavantage, is that with CList
    one device can only be tracked in one NMManager instance at a time.
    But that is fine. There exists only one NMManager instance for now,
    and even if we would ever introduce multiple managers, we probably
    would not associate one NMDevice instance with multiple managers.
    
    The advantages are arguably not huge, but CList is IMHO clearly the
    more suited data structure. No need to stick to a suboptimal data
    structure for the job. Refactor it.
    4a705e1a