From 450d68388143fa5a7a84804d4e750a8d3dc91eb9 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 19 Aug 2015 10:45:01 +0200 Subject: [PATCH] nm-settings: take a reference to ourselves as long we have signals that use us hooked on Program received signal SIGSEGV, Segmentation fault. g_type_check_instance_cast (type_instance=type_instance@entry=0x89f180, iface_type=9004512) at gtype.c:4060 4060 node = lookup_type_node_I (type_instance->g_class->g_type); (gdb) bt #0 0x00007ffff4b44e80 in g_type_check_instance_cast (type_instance=type_instance@entry=0x89f180, iface_type=9004512) at gtype.c:4060 #1 0x000000000056a460 in connection_visibility_changed (connection=0x89f680 [NMKeyfileConnection], pspec=, user_data=0x89f180) at settings/nm-settings.c:870 #5 0x00007ffff4b3b54f in (instance=instance@entry=0x89f680, signal_id=, detail=) at gsignal.c:3393 #2 0x00007ffff4b200b5 in g_closure_invoke (closure=0x9131a0, return_value=return_value@entry=0x0, n_param_values=2, param_values=param_values@entry=0x7fffffffd540, invocation_hint=invocation_hint@entry=0x7fffffffd4c0) at gclosure.c:801 #3 0x00007ffff4b32499 in signal_emit_unlocked_R (node=node@entry=0x8696b0, detail=detail@entry=641, instance=instance@entry=0x89f680, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd540) at gsignal.c:3581 #4 0x00007ffff4b3b1a0 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffd710) at gsignal.c:3337 #6 0x00007ffff4b24665 in g_object_dispatch_properties_changed (object=0x89f680 [NMKeyfileConnection], n_pspecs=, pspecs=) at gobject.c:1056 #7 0x00007ffff4b26d11 in g_object_notify (pspec=0x8ce660 [GParamBoolean], object=0x89f680 [NMKeyfileConnection]) at gobject.c:1149 #8 0x00007ffff4b26d11 in g_object_notify (object=0x89f680 [NMKeyfileConnection], property_name=property_name@entry=0x5d2eb9 "visible") at gobject.c:1197 #9 0x0000000000497f85 in set_visible (self=self@entry=0x89f680 [NMKeyfileConnection], new_visible=new_visible@entry=0) at settings/nm-settings-connection.c:296 #10 0x0000000000498165 in dispose (object=0x89f680 [NMKeyfileConnection]) at settings/nm-settings-connection.c:2390 #11 0x00007ffff4b24fec in g_object_unref (_object=0x89f680) at gobject.c:3137 #12 0x00000000004a4a4f in dispose (object=0xa24260 [NMVpnConnection]) at nm-active-connection.c:904 #13 0x00007ffff4b24fec in g_object_unref (_object=0xa24260) at gobject.c:3137 #14 0x0000000000577636 in nm_vpn_service_stop_connections (service=0x8ff610 [NMVpnService], quitting=1, reason=NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED) at vpn-manager/nm-vpn-service.c:150 #15 0x0000000000576ea2 in dispose (object=0x921060 [NMVpnManager]) at vpn-manager/nm-vpn-manager.c:284 #16 0x00007ffff4b24fec in g_object_unref (_object=0x921060) at gobject.c:3137 #17 0x00000000004d0f05 in dispose (object=0x88a2b0 [NMManager]) at nm-manager.c:5061 #18 0x00007ffff4b24fec in g_object_unref (_object=0x88a2b0) at gobject.c:3137 #19 0x0000000000444e08 in _nm_singleton_instance_destroy () at NetworkManagerUtils.c:138 #20 0x00007ffff7de97b7 in _dl_fini () at dl-fini.c:252 #21 0x00007ffff4444778 in __run_exit_handlers (status=status@entry=0, listp=0x7ffff47d0618 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:82 #22 0x00007ffff44447c5 in __GI_exit (status=status@entry=0) at exit.c:104 #23 0x0000000000445b80 in main (argc=1, argv=0x7fffffffdf08) at main.c:458 (gdb) --- src/settings/nm-settings.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 1ee60ad2c4..afd926c53e 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -882,7 +882,6 @@ connection_removed (NMSettingsConnection *connection, gpointer user_data) if (!g_hash_table_lookup (priv->connections, cpath)) g_return_if_reached (); - g_object_ref (connection); /* Disconnect signal handlers, as plugins might still keep references @@ -895,6 +894,7 @@ connection_removed (NMSettingsConnection *connection, gpointer user_data) g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated_by_user), self); g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_visibility_changed), self); g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_ready_changed), self); + g_object_unref (self); /* Forget about the connection internally */ g_hash_table_remove (priv->connections, (gpointer) cpath); @@ -1019,6 +1019,7 @@ claim_connection (NMSettings *self, NMSettingsConnection *connection) /* Evil openconnect migration hack */ openconnect_migrate_hack (NM_CONNECTION (connection)); + g_object_ref (self); g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED, G_CALLBACK (connection_removed), self); g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED,