diff options
Diffstat (limited to 'src/nm-manager.c')
-rw-r--r-- | src/nm-manager.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index 237a45537d..06dbc86d7c 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -2089,7 +2089,8 @@ _register_device_factory (NMDeviceFactory *factory, gpointer user_data) static void platform_link_added (NMManager *self, int ifindex, - const NMPlatformLink *plink) + const NMPlatformLink *plink, + NMDevRunState *run_state) { NMDeviceFactory *factory; NMDevice *device = NULL; @@ -2200,7 +2201,7 @@ _platform_link_cb_idle (PlatformLinkCbData *data) NMPlatformLink pllink; pllink = *l; /* make a copy of the link instance */ - platform_link_added (self, data->ifindex, &pllink); + platform_link_added (self, data->ifindex, &pllink, NULL); } else { NMDevice *device; GError *error = NULL; @@ -2258,11 +2259,23 @@ platform_query_devices (NMManager *self) GArray *links_array; NMPlatformLink *links; int i; + gs_unref_hashtable GHashTable *seen_ifindexes = NULL; + + seen_ifindexes = g_hash_table_new (NULL, NULL); links_array = nm_platform_link_get_all (NM_PLATFORM_GET); links = (NMPlatformLink *) links_array->data; - for (i = 0; i < links_array->len; i++) - platform_link_added (self, links[i].ifindex, &links[i]); + for (i = 0; i < links_array->len; i++) { + gs_free NMDevRunState *run_state = NULL; + + g_hash_table_add (seen_ifindexes, GINT_TO_POINTER (links[i].ifindex)); + + run_state = nm_dev_run_state_load (links[i].ifindex, FALSE); + + platform_link_added (self, links[i].ifindex, &links[i], run_state); + } + + nm_dev_run_state_purge_stale_files (seen_ifindexes); g_array_unref (links_array); } |