mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-04 11:50:29 +01:00
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
This commit is contained in:
parent
64c5395cb1
commit
3b76ae18a5
2 changed files with 47 additions and 27 deletions
|
|
@ -304,6 +304,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])
|
||||
|
|
|
|||
|
|
@ -49,7 +49,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;
|
||||
|
|
@ -359,9 +359,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);
|
||||
|
|
@ -462,15 +462,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;
|
||||
}
|
||||
|
||||
|
|
@ -490,6 +495,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,
|
||||
|
|
@ -523,18 +530,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",
|
||||
|
|
@ -549,6 +545,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,
|
||||
|
|
@ -588,8 +605,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 */
|
||||
|
|
@ -613,8 +630,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
|
||||
|
|
@ -636,7 +653,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);
|
||||
}
|
||||
|
||||
|
|
@ -647,8 +664,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,
|
||||
|
|
@ -670,9 +687,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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue