diff options
author | Thomas Haller <thaller@redhat.com> | 2018-03-29 19:16:03 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-04-13 09:09:46 +0200 |
commit | 0dd3e6099cfcf4716b19336f2328fc7eff75cde5 (patch) | |
tree | 6ce1d8122437e816407692ab27a1a7291b5fa82f | |
parent | cd71ec3084d972ab70aa6229fd4752317106d281 (diff) |
core: don't unexport active-connection when settings connection disappears
When a settings-connection gets deleted, we need to bring down the
NMActiveConnection that contains it. However, we shouldn't just unexport
the active connection from D-Bus. Instead, clear the settings path.
We need to drop the path, because the connection is going away. It's a
bit ugly, that an active-connection might reference no
settings-connection. However, this only happens during shut-down.
The alternative, would be to keep the settings-connection object
in a zombie state, exported on D-Bus. However, that seems even more
confusing to me.
-rw-r--r-- | src/nm-active-connection.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index e78caaf28f..dc579487d8 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -184,18 +184,10 @@ _settings_connection_updated (NMSettingsConnection *connection, } static void -_settings_connection_removed (NMSettingsConnection *connection, - gpointer user_data) +_settings_connection_exported_changed (NMSettingsConnection *settings_connection, + NMActiveConnection *self) { - NMActiveConnection *self = user_data; - - /* Our settings connection is about to drop off. The next active connection - * cleanup is going to tear us down (at least until we grow the capability to - * re-link; in that case we'd just clean the references to the old connection here). - * Let's remove ourselves from the bus so that we're not exposed with a dangling - * reference to the setting connection once it's gone. */ - if (nm_dbus_object_is_exported (NM_DBUS_OBJECT (self))) - nm_dbus_object_unexport (NM_DBUS_OBJECT (self)); + _notify (self, PROP_CONNECTION); } static void @@ -207,14 +199,14 @@ _set_settings_connection (NMActiveConnection *self, NMSettingsConnection *connec return; if (priv->settings_connection) { g_signal_handlers_disconnect_by_func (priv->settings_connection, _settings_connection_updated, self); - g_signal_handlers_disconnect_by_func (priv->settings_connection, _settings_connection_removed, self); + g_signal_handlers_disconnect_by_func (priv->settings_connection, _settings_connection_exported_changed, self); g_signal_handlers_disconnect_by_func (priv->settings_connection, _settings_connection_notify_flags, self); g_clear_object (&priv->settings_connection); } if (connection) { priv->settings_connection = g_object_ref (connection); g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL, (GCallback) _settings_connection_updated, self); - g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED, (GCallback) _settings_connection_removed, self); + g_signal_connect (connection, NM_DBUS_OBJECT_EXPORTED_CHANGED, G_CALLBACK (_settings_connection_exported_changed), self); if (nm_active_connection_get_activation_type (self) == NM_ACTIVATION_TYPE_EXTERNAL) g_signal_connect (connection, "notify::"NM_SETTINGS_CONNECTION_FLAGS, (GCallback) _settings_connection_notify_flags, self); } @@ -1186,7 +1178,7 @@ get_property (GObject *object, guint prop_id, * is set, to get an assertion failure if somebody tries to access the * getters at the wrong time. */ case PROP_CONNECTION: - g_value_set_string (value, nm_dbus_object_get_path (NM_DBUS_OBJECT (priv->settings_connection))); + nm_dbus_utils_g_value_set_object_path_still_exported (value, priv->settings_connection); break; case PROP_ID: g_value_set_string (value, nm_connection_get_id (NM_CONNECTION (priv->settings_connection))); |