diff options
Diffstat (limited to 'src/mm-manager.c')
-rw-r--r-- | src/mm-manager.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/mm-manager.c b/src/mm-manager.c index 5c048510..8c7969ee 100644 --- a/src/mm-manager.c +++ b/src/mm-manager.c @@ -789,11 +789,28 @@ set_property (GObject *object, MMManagerPrivate *priv = MM_MANAGER (object)->priv; switch (prop_id) { - case PROP_CONNECTION: - if (priv->connection) + case PROP_CONNECTION: { + gboolean had_connection = FALSE; + + if (priv->connection) { + had_connection = TRUE; g_object_unref (priv->connection); + } priv->connection = g_value_dup_object (value); + /* Propagate connection loss to subobjects */ + if (had_connection && !priv->connection) { + if (priv->object_manager) { + mm_dbg ("Stopping connection in object manager server"); + g_dbus_object_manager_server_set_connection (priv->object_manager, NULL); + } + if (priv->test_skeleton && + g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (priv->test_skeleton))) { + mm_dbg ("Stopping connection in test skeleton"); + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->test_skeleton)); + } + } break; + } case PROP_AUTO_SCAN: priv->auto_scan = g_value_get_boolean (value); break; |