diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-10-31 09:14:13 +0100 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-03-18 11:48:56 -0400 |
commit | 86b8b602942038a370914006e61af64ab15ee0b8 (patch) | |
tree | c606ed465fe2f3b762bfc5018887a959ac9ead3f | |
parent | 9dba1fa80f9cb27f7f1efc503002900c3f164559 (diff) | |
download | NetworkManager-86b8b602942038a370914006e61af64ab15ee0b8.tar.gz |
modem-manager: if building systemd support, assume it manages the MM lifecycle
We will not explicitly poke MM to start it if NetworkManager is built with
systemd support.
https://bugzilla.gnome.org/show_bug.cgi?id=703040
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | src/modem-manager/nm-modem-manager.c | 71 |
2 files changed, 47 insertions, 27 deletions
diff --git a/configure.ac b/configure.ac index 3ebd30bf44..b442d5ccd6 100644 --- a/configure.ac +++ b/configure.ac @@ -280,6 +280,9 @@ AS_IF([test -z "$with_systemdsystemunitdir"], with_systemdsystemunitdir=no) AM_CONDITIONAL(HAVE_SYSTEMD, [test "$with_systemdsystemunitdir" != no]) if test "$with_systemdsystemunitdir" != no; then AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) + AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd support is available]) +else + AC_DEFINE(HAVE_SYSTEMD, 0, [Define if systemd support is available]) fi PKG_CHECK_MODULES(SYSTEMD_200, [systemd >= 200], [have_systemd_200=yes],[have_systemd_200=no]) diff --git a/src/modem-manager/nm-modem-manager.c b/src/modem-manager/nm-modem-manager.c index dd01646eea..7b566ca486 100644 --- a/src/modem-manager/nm-modem-manager.c +++ b/src/modem-manager/nm-modem-manager.c @@ -51,7 +51,7 @@ struct _NMModemManagerPrivate { /* ModemManager >= 0.7 */ GDBusConnection *dbus_connection; MMManager *modem_manager_1; - guint modem_manager_1_poke_id; + guint modem_manager_1_launch_id; gboolean old_modem_manager_found; gboolean new_modem_manager_found; guint modem_manager_1_name_owner_changed_id; @@ -442,9 +442,9 @@ modem_manager_1_clear_signals (NMModemManager *self) static void clear_modem_manager_1_support (NMModemManager *self) { - if (self->priv->modem_manager_1_poke_id) { - g_source_remove (self->priv->modem_manager_1_poke_id); - self->priv->modem_manager_1_poke_id = 0; + if (self->priv->modem_manager_1_launch_id) { + g_source_remove (self->priv->modem_manager_1_launch_id); + self->priv->modem_manager_1_launch_id = 0; } modem_manager_1_clear_signals (self); @@ -545,15 +545,20 @@ modem_manager_1_name_owner_changed (MMManager *modem_manager_1, gchar *name_owner; /* Quit poking, if any */ - if (self->priv->modem_manager_1_poke_id) { - g_source_remove (self->priv->modem_manager_1_poke_id); - self->priv->modem_manager_1_poke_id = 0; + if (self->priv->modem_manager_1_launch_id) { + g_source_remove (self->priv->modem_manager_1_launch_id); + self->priv->modem_manager_1_launch_id = 0; } name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (modem_manager_1)); if (!name_owner) { nm_log_info (LOGD_MB, "ModemManager disappeared from bus"); + +#if !HAVE_SYSTEMD + /* If not managed by systemd, schedule relaunch */ schedule_modem_manager_1_relaunch (self, 0); +#endif + return; } @@ -573,6 +578,8 @@ modem_manager_1_name_owner_changed (MMManager *modem_manager_1, */ } +#if !HAVE_SYSTEMD + static void modem_manager_1_poke_cb (GDBusConnection *connection, GAsyncResult *res, @@ -606,18 +613,7 @@ modem_manager_1_poke_cb (GDBusConnection *connection, static void modem_manager_1_poke (NMModemManager *self) { - gchar *name_owner; - /* If there is no current owner right away, ensure we poke to get one */ - name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->priv->modem_manager_1)); - if (name_owner) { - /* Available! */ - modem_manager_1_available (self); - g_free (name_owner); - return; - } - - /* Poke! */ g_dbus_connection_call (self->priv->dbus_connection, "org.freedesktop.ModemManager1", "/org/freedesktop/ModemManager1", @@ -632,6 +628,27 @@ modem_manager_1_poke (NMModemManager *self) g_object_ref (self)); /* user_data */ } +#endif /* HAVE_SYSTEMD */ + +static void +modem_manager_1_check_name_owner (NMModemManager *self) +{ + gchar *name_owner; + + name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->priv->modem_manager_1)); + if (name_owner) { + /* Available! */ + modem_manager_1_available (self); + g_free (name_owner); + return; + } + +#if !HAVE_SYSTEMD + /* If the lifecycle is not managed by systemd, poke */ + modem_manager_1_poke (self); +#endif +} + static void manager_new_ready (GObject *source, GAsyncResult *res, @@ -671,8 +688,8 @@ manager_new_ready (GObject *source, "object-removed", G_CALLBACK (modem_object_removed), self); - /* Poke the MMManager! */ - modem_manager_1_poke (self); + + modem_manager_1_check_name_owner (self); } /* Balance refcount */ @@ -696,8 +713,8 @@ ensure_client (NMModemManager *self) return; } - /* If already available, poke! */ - modem_manager_1_poke (self); + /* If already available, recheck name owner! */ + modem_manager_1_check_name_owner (self); } static void @@ -719,7 +736,7 @@ bus_get_ready (GObject *source, /* If we found the old MM, abort */ clear_modem_manager_1_support (self); } else { - /* Got the bus, create new ModemManager client. */ + /* Got the bus, ensure client */ ensure_client (self); } @@ -730,8 +747,8 @@ bus_get_ready (GObject *source, static gboolean ensure_bus (NMModemManager *self) { - /* Clear poke ID */ - self->priv->modem_manager_1_poke_id = 0; + /* Clear launch ID */ + self->priv->modem_manager_1_launch_id = 0; if (!self->priv->dbus_connection) g_bus_get (G_BUS_TYPE_SYSTEM, @@ -753,9 +770,9 @@ schedule_modem_manager_1_relaunch (NMModemManager *self, * cancelled if the object gets disposed. */ if (n_seconds) - self->priv->modem_manager_1_poke_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)ensure_bus, self); + self->priv->modem_manager_1_launch_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)ensure_bus, self); else - self->priv->modem_manager_1_poke_id = g_idle_add ((GSourceFunc)ensure_bus, self); + self->priv->modem_manager_1_launch_id = g_idle_add ((GSourceFunc)ensure_bus, self); } #endif /* WITH_MODEM_MANAGER_1 */ |