From b339d4e5d67b31381445cbe866686915446e72de Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 12 Aug 2015 17:18:52 +0200 Subject: [PATCH] device-factory: allow using nm_device_factory_manager_for_each_factory() before load We can dispose the manager before loading the factories: NetworkManager[20214]: [1439391976.738579] [nm-bus-manager.c:764] nm_bus_manager_start_service(): Could not acquire the NetworkManager service as it is already taken. NetworkManager[20214]: [1439391976.738617] [main.c:424] main(): failed to start the dbus service. NetworkManager[20214]: nm_device_factory_manager_for_each_factory: assertion 'factories_by_link' failed Program received signal SIGTRAP, Trace/breakpoint trap. g_logv (log_domain=0x5a5028 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=, args=args@entry=0x7fffffffd750) at gmessages.c:1046 1046 g_private_set (&g_log_depth, GUINT_TO_POINTER (depth)); (gdb) bt #0 0x00007ffff4a738c3 in g_logv (log_domain=0x5a5028 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=, args=args@entry=0x7fffffffd750) at gmessages.c:1046 #1 0x00007ffff4a73a3f in g_log (log_domain=log_domain@entry=0x5a5028 "NetworkManager", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ffff4ae173d "%s: assertion '%s' failed") at gmessages.c:1079 #2 0x00007ffff4a73a79 in g_return_if_fail_warning (log_domain=log_domain@entry=0x5a5028 "NetworkManager", pretty_function=pretty_function@entry=0x5a5420 <__FUNCTION__.26921> "nm_device_factory_manager_for_each_factory", expression=expression@entry=0x5a4f25 "factories_by_link") at gmessages.c:1088 #3 0x00000000004704e4 in nm_device_factory_manager_for_each_factory (callback=callback@entry=0x4d29a0 <_deinit_device_factory>, user_data=user_data@entry=0x8802b0) at devices/nm-device-factory.c:306 #4 0x00000000004d2927 in dispose (object=0x8802b0 [NMManager]) at nm-manager.c:5086 #5 0x00007ffff4d6ea82 in g_object_unref (_object=0x8802b0) at gobject.c:3133 #6 0x00000000004459f6 in main (argc=1, argv=0x7fffffffda88) at main.c:468 (gdb) --- src/devices/nm-device-factory.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c index bf3f25c606..0aea7a69e2 100644 --- a/src/devices/nm-device-factory.c +++ b/src/devices/nm-device-factory.c @@ -303,19 +303,20 @@ nm_device_factory_manager_for_each_factory (NMDeviceFactoryManagerFactoryFunc ca NMDeviceFactory *factory; GSList *list_iter, *list = NULL; - g_return_if_fail (factories_by_link); - g_return_if_fail (factories_by_setting); - - g_hash_table_iter_init (&iter, factories_by_link); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &factory)) { - if (!g_slist_find (list, factory)) - list = g_slist_prepend (list, factory); + if (factories_by_link) { + g_hash_table_iter_init (&iter, factories_by_link); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &factory)) { + if (!g_slist_find (list, factory)) + list = g_slist_prepend (list, factory); + } } - g_hash_table_iter_init (&iter, factories_by_setting); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &factory)) { - if (!g_slist_find (list, factory)) - list = g_slist_prepend (list, factory); + if (factories_by_setting) { + g_hash_table_iter_init (&iter, factories_by_setting); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &factory)) { + if (!g_slist_find (list, factory)) + list = g_slist_prepend (list, factory); + } } for (list_iter = list; list_iter; list_iter = list_iter->next)