diff options
author | Thomas Haller <thaller@redhat.com> | 2016-01-27 14:19:37 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-01-27 14:20:45 +0100 |
commit | 1a3597529e6389f5b648fe11e95743d41c1fb4b1 (patch) | |
tree | 7f84c7577282d525a60a22e2196c739138173aa0 | |
parent | bb78d14467c2bb5c85d2efbe84e521148322b1ca (diff) | |
parent | 53233bb04ccb65cc24ad186c98a46963f437850e (diff) | |
download | NetworkManager-1a3597529e6389f5b648fe11e95743d41c1fb4b1.tar.gz |
bluez: merge branch 'th/bluez-crash-shutdown-rh1301389'
The crash from rh1301389 is probably not fixed by these changes.
The cause there is still unclear, however these changes seem
anyway correct. Merge them.
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1301389
-rw-r--r-- | src/devices/bluetooth/nm-bluez-device.c | 14 | ||||
-rw-r--r-- | src/devices/bluetooth/nm-bluez-manager.c | 7 | ||||
-rw-r--r-- | src/nm-manager.c | 14 |
3 files changed, 23 insertions, 12 deletions
diff --git a/src/devices/bluetooth/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c index b70321437d..2d18c17b59 100644 --- a/src/devices/bluetooth/nm-bluez-device.c +++ b/src/devices/bluetooth/nm-bluez-device.c @@ -1014,7 +1014,7 @@ nm_bluez_device_new (const char *path, const char *interface_name = NULL; g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (provider != NULL, NULL); + g_return_val_if_fail (NM_IS_CONNECTION_PROVIDER (provider), NULL); g_return_val_if_fail (bluez_version == 4 || bluez_version == 5, NULL); self = (NMBluezDevice *) g_object_new (NM_TYPE_BLUEZ_DEVICE, @@ -1028,7 +1028,7 @@ nm_bluez_device_new (const char *path, priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self); priv->bluez_version = bluez_version; - priv->provider = provider; + priv->provider = g_object_ref (provider); g_return_val_if_fail (bluez_version == 5 || (bluez_version == 4 && adapter_address), NULL); if (adapter_address) set_adapter_address (self, adapter_address); @@ -1102,9 +1102,11 @@ dispose (GObject *object) } #endif - g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_added, self); - g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_removed, self); - g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_updated, self); + if (priv->provider) { + g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_added, self); + g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_removed, self); + g_signal_handlers_disconnect_by_func (priv->provider, cp_connection_updated, self); + } g_slist_free_full (priv->connections, g_object_unref); priv->connections = NULL; @@ -1120,6 +1122,8 @@ dispose (GObject *object) nm_settings_connection_delete (NM_SETTINGS_CONNECTION (to_delete), NULL, NULL); g_object_unref (to_delete); } + + g_clear_object (&priv->provider); } static void diff --git a/src/devices/bluetooth/nm-bluez-manager.c b/src/devices/bluetooth/nm-bluez-manager.c index 6903356c8c..b093d4a2df 100644 --- a/src/devices/bluetooth/nm-bluez-manager.c +++ b/src/devices/bluetooth/nm-bluez-manager.c @@ -397,6 +397,10 @@ dispose (GObject *object) cleanup_checking (self, TRUE); priv->bluez_version = 0; + + g_clear_object (&priv->provider); + + G_OBJECT_CLASS (nm_bluez_manager_parent_class)->dispose (object); } static void @@ -404,8 +408,7 @@ nm_bluez_manager_init (NMBluezManager *self) { NMBluezManagerPrivate *priv = NM_BLUEZ_MANAGER_GET_PRIVATE (self); - priv->provider = nm_connection_provider_get (); - g_assert (priv->provider); + priv->provider = g_object_ref (nm_connection_provider_get ()); } static NMDevice * diff --git a/src/nm-manager.c b/src/nm-manager.c index f647c8f9e4..f8d177b583 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -5036,16 +5036,20 @@ NM_DEFINE_SINGLETON_REGISTER (NMManager); NMManager * nm_manager_get (void) { - g_assert (singleton_instance); + g_return_val_if_fail (singleton_instance, NULL); return singleton_instance; } NMConnectionProvider * nm_connection_provider_get (void) { - g_assert (singleton_instance); - g_assert (NM_MANAGER_GET_PRIVATE (singleton_instance)->settings); - return NM_CONNECTION_PROVIDER (NM_MANAGER_GET_PRIVATE (singleton_instance)->settings); + NMConnectionProvider *p; + + g_return_val_if_fail (singleton_instance, NULL); + + p = NM_CONNECTION_PROVIDER (NM_MANAGER_GET_PRIVATE (singleton_instance)->settings); + g_return_val_if_fail (p, NULL); + return p; } NMManager * @@ -5056,7 +5060,7 @@ nm_manager_setup (const char *state_file, { NMManager *self; - g_assert (singleton_instance == NULL); + g_return_val_if_fail (!singleton_instance, singleton_instance); self = g_object_new (NM_TYPE_MANAGER, NM_MANAGER_NETWORKING_ENABLED, initial_net_enabled, |