summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-10-31 09:14:13 +0100
committerDan Winship <danw@gnome.org>2014-03-18 11:48:56 -0400
commit86b8b602942038a370914006e61af64ab15ee0b8 (patch)
treec606ed465fe2f3b762bfc5018887a959ac9ead3f
parent9dba1fa80f9cb27f7f1efc503002900c3f164559 (diff)
downloadNetworkManager-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.ac3
-rw-r--r--src/modem-manager/nm-modem-manager.c71
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 */