aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2019-01-13 18:01:54 +0100
committerAleksander Morgado <aleksander@aleksander.es>2019-01-13 18:01:54 +0100
commit3eb3854fcb19529b7e82f224419d177fa56c569c (patch)
treed72d0dc84d044b2bc121e41b10851a4773907906 /libmm-glib
parent479590412e6b746365645eb9bbc9c605c20ab8bc (diff)
libmm-glib,manager: cleanup internal proxy on name owner updates
The MMManager object keeps an internal proxy object for the Manager interface, and we must make sure we cleanup this object any time the MM daemon is restarted. Otherwise, the MMManager may end up trying to use a stale proxy associated to a previous run of the daemon, and e.g. not showing properly the runtime version info. E.g., in this sequence with the example python tester, the runtime version of the daemon was valid only for the first time the daemon runs, and if the daemon is restarted, mm_manager_get_version() would keep returning NULL. $ ./modem-watcher-python [ModemWatcher] ModemManager service not available in bus [ModemWatcher] ModemManager 1.9.990 service is available in bus [ModemWatcher] Dell Inc. (DW5821e Snapdragon X20 LTE) modem managed by ModemManager [None]: /org/freedesktop/ModemManager1/Modem/0 [ModemWatcher] ModemManager service not available in bus [ModemWatcher] ModemManager None service is available in bus [ModemWatcher] Dell Inc. (DW5821e Snapdragon X20 LTE) modem managed by ModemManager [None]: /org/freedesktop/ModemManager1/Modem/0 [ModemWatcher] ModemManager service not available in bus [ModemWatcher] ModemManager None service is available in bus [ModemWatcher] Dell Inc. (DW5821e Snapdragon X20 LTE) modem managed by ModemManager [None]: /org/freedesktop/ModemManager1/Modem/0
Diffstat (limited to 'libmm-glib')
-rw-r--r--libmm-glib/mm-manager.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libmm-glib/mm-manager.c b/libmm-glib/mm-manager.c
index fe2932db..d294b32f 100644
--- a/libmm-glib/mm-manager.c
+++ b/libmm-glib/mm-manager.c
@@ -89,6 +89,15 @@ get_proxy_type (GDBusObjectManagerClient *manager,
/*****************************************************************************/
+static void
+cleanup_modem_manager1_proxy (MMManager *self)
+{
+ if (self->priv->manager_iface_proxy) {
+ g_signal_handlers_disconnect_by_func (self, cleanup_modem_manager1_proxy, NULL);
+ g_clear_object (&self->priv->manager_iface_proxy);
+ }
+}
+
static gboolean
ensure_modem_manager1_proxy (MMManager *self,
GError **error)
@@ -124,6 +133,12 @@ ensure_modem_manager1_proxy (MMManager *self,
g_free (object_path);
g_free (name);
+ if (self->priv->manager_iface_proxy)
+ g_signal_connect (self,
+ "notify::name-owner",
+ G_CALLBACK (cleanup_modem_manager1_proxy),
+ NULL);
+
return !!self->priv->manager_iface_proxy;
}