diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-06-29 14:31:19 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-07-07 17:14:38 +0200 |
commit | adba47cb613faa4597dc0e2c04000f499aad25ba (patch) | |
tree | c0ceee536b73d09e9eef0e90c3c5cffcf378232d | |
parent | 7f191eb15be0f0ee1dbd586b423c6d600d4864c9 (diff) | |
download | NetworkManager-adba47cb613faa4597dc0e2c04000f499aad25ba.tar.gz |
active-connection: don't weak-unref parent inside notify function
-rw-r--r-- | src/nm-active-connection.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index 2b7847b2df..8b1824225f 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -719,14 +719,14 @@ nm_active_connection_get_assumed (NMActiveConnection *self) /****************************************************************/ -static void unwatch_parent (NMActiveConnection *self); +static void unwatch_parent (NMActiveConnection *self, gboolean unref); static void parent_destroyed (gpointer user_data, GObject *parent) { NMActiveConnection *self = user_data; - unwatch_parent (self); + unwatch_parent (self, FALSE); g_signal_emit (self, signals[PARENT_ACTIVE], 0, NULL); } @@ -741,19 +741,20 @@ parent_state_cb (NMActiveConnection *parent_ac, if (parent_state < NM_ACTIVE_CONNECTION_STATE_ACTIVATED) return; - unwatch_parent (self); + unwatch_parent (self, TRUE); g_signal_emit (self, signals[PARENT_ACTIVE], 0, parent_ac); } static void -unwatch_parent (NMActiveConnection *self) +unwatch_parent (NMActiveConnection *self, gboolean unref) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); g_signal_handlers_disconnect_by_func (priv->parent, (GCallback) parent_state_cb, self); - g_object_weak_unref ((GObject *) priv->parent, parent_destroyed, self); + if (unref) + g_object_weak_unref ((GObject *) priv->parent, parent_destroyed, self); priv->parent = NULL; } @@ -1135,7 +1136,7 @@ dispose (GObject *object) g_clear_object (&priv->master); if (priv->parent) - unwatch_parent (self); + unwatch_parent (self, TRUE); g_clear_object (&priv->subject); |