summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-01-27 14:19:37 +0100
committerThomas Haller <thaller@redhat.com>2016-01-27 14:20:45 +0100
commit1a3597529e6389f5b648fe11e95743d41c1fb4b1 (patch)
tree7f84c7577282d525a60a22e2196c739138173aa0
parentbb78d14467c2bb5c85d2efbe84e521148322b1ca (diff)
parent53233bb04ccb65cc24ad186c98a46963f437850e (diff)
downloadNetworkManager-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.c14
-rw-r--r--src/devices/bluetooth/nm-bluez-manager.c7
-rw-r--r--src/nm-manager.c14
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,