From 3fb4eed3ef19806f497076e1a94b5a7418ab8d7d Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 1 Jun 2018 18:50:39 +0200 Subject: [PATCH] settings: let connections keep NMSettings alive The NMSettings instance can't be disposed while there is any exported connection. Ideally we should unexport all connections on NMSettings' disposal, but for now leak @self on termination when there are connections alive. This fixes the following bug on shutdown: assertion failed: (c_list_is_empty (&priv->connections_lst_head)) #0 raise () from target:/lib64/libc.so.6 #1 abort () from target:/lib64/libc.so.6 #2 g_assertion_message (domain=0x66cab2 "NetworkManager", file=0x6a5e48 "src/settings/nm-settings.c", line=1929) #3 g_assertion_message_expr () at gtestutils.c:2555 #4 finalize (object=0x1dab170) at src/settings/nm-settings.c:1929 #5 g_object_unref (_object=0x1dab170) at gobject.c:3340 #6 dispose (object=0x1de50b0) at src/nm-manager.c:7139 #7 g_object_unref (_object=0x1de50b0) at gobject.c:3303 #8 _nm_singleton_instance_destroy () at src/nm-core-utils.c:138 #9 _dl_fini () from target:/lib64/ld-linux-x86-64.so.2 #10 __run_exit_handlers () from target:/lib64/libc.so.6 #11 exit () from target:/lib64/libc.so.6 #12 main (argc=, argv=) at src/main.c:460 https://bugzilla.redhat.com/show_bug.cgi?id=1579858 --- src/settings/nm-settings.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 6ad2624df4..5bb629dca2 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -886,6 +886,8 @@ connection_removed (NMSettingsConnection *connection, gpointer user_data) g_object_unref (connection); check_startup_complete (self); + + g_object_unref (self); /* Balanced by a ref in claim_connection() */ } #define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect" @@ -998,6 +1000,11 @@ claim_connection (NMSettings *self, NMSettingsConnection *connection) _clear_connections_cached_list (priv); g_object_ref (connection); + /* FIXME(shutdown): The NMSettings instance can't be disposed + * while there is any exported connection. Ideally we should + * unexport all connections on NMSettings' disposal, but for now + * leak @self on termination when there are connections alive. */ + g_object_ref (self); priv->connections_len++; c_list_link_tail (&priv->connections_lst_head, &connection->_connections_lst);