From bd509b5ea265459eea9704145c5f951ae6a2e240 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 18:51:21 +0200 Subject: [PATCH 01/11] po: remove file "src/nm-sleep-monitor-systemd.c" from POTFILES.in as it has no translations Fixes: 753f727af566a56e548613c35a3ccffe3d212d3b (cherry picked from commit bf9a74c69fb7ceef57d3a24661067e3e0d598adc) --- po/POTFILES.in | 1 - 1 file changed, 1 deletion(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index b247e54817..ded6d5d549 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -170,6 +170,5 @@ src/nm-config.c src/nm-iface-helper.c src/nm-logging.c src/nm-manager.c -src/nm-sleep-monitor-systemd.c src/settings/plugins/ibft/plugin.c src/settings/plugins/ifcfg-rh/reader.c From aa67e0c005b9cf66a4f8403d8232d433cfbb2a02 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 16:17:19 +0200 Subject: [PATCH 02/11] sleep-monitor/trivial: rename "sd_proxy" instance to "proxy" It's not only relevant for systemd (sd). (cherry picked from commit 6e45909f79d1532e96ec8800c24a466bff4dc92c) --- src/nm-sleep-monitor-systemd.c | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/nm-sleep-monitor-systemd.c b/src/nm-sleep-monitor-systemd.c index a006d4c7c1..9ed0f9d4fd 100644 --- a/src/nm-sleep-monitor-systemd.c +++ b/src/nm-sleep-monitor-systemd.c @@ -54,9 +54,9 @@ struct _NMSleepMonitor { GObject parent_instance; - GDBusProxy *sd_proxy; + GDBusProxy *proxy; - /* used both during construction of sd_proxy and during Inhibit call. */ + /* used both during construction of proxy and during Inhibit call. */ GCancellable *cancellable; gint inhibit_fd; @@ -126,13 +126,13 @@ inhibit_done (GObject *source, GAsyncResult *result, gpointer user_data) { - GDBusProxy *sd_proxy = G_DBUS_PROXY (source); + GDBusProxy *proxy = G_DBUS_PROXY (source); NMSleepMonitor *self = user_data; gs_free_error GError *error = NULL; gs_unref_variant GVariant *res = NULL; gs_unref_object GUnixFDList *fd_list = NULL; - res = g_dbus_proxy_call_with_unix_fd_list_finish (sd_proxy, &fd_list, result, &error); + res = g_dbus_proxy_call_with_unix_fd_list_finish (proxy, &fd_list, result, &error); if (!res) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_clear_object (&self->cancellable); @@ -156,13 +156,13 @@ static void take_inhibitor (NMSleepMonitor *self) { g_return_if_fail (NM_IS_SLEEP_MONITOR (self)); - g_return_if_fail (G_IS_DBUS_PROXY (self->sd_proxy)); + g_return_if_fail (G_IS_DBUS_PROXY (self->proxy)); drop_inhibitor (self); _LOGD ("Taking systemd sleep inhibitor"); self->cancellable = g_cancellable_new (); - g_dbus_proxy_call_with_unix_fd_list (self->sd_proxy, + g_dbus_proxy_call_with_unix_fd_list (self->proxy, "Inhibit", g_variant_new ("(ssss)", "sleep", @@ -204,7 +204,7 @@ name_owner_cb (GObject *object, NMSleepMonitor *self = NM_SLEEP_MONITOR (user_data); char *owner; - g_assert (proxy == self->sd_proxy); + g_assert (proxy == self->proxy); owner = g_dbus_proxy_get_name_owner (proxy); if (owner) @@ -221,25 +221,25 @@ on_proxy_acquired (GObject *object, { GError *error = NULL; char *owner; - GDBusProxy *sd_proxy; + GDBusProxy *proxy; - sd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error); - if (!sd_proxy) { + proxy = g_dbus_proxy_new_for_bus_finish (res, &error); + if (!proxy) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) _LOGW ("Failed to acquire logind proxy: %s", error->message); g_clear_error (&error); return; } - self->sd_proxy = sd_proxy; + self->proxy = proxy; g_clear_object (&self->cancellable); - self->sig_id_1 = g_signal_connect (self->sd_proxy, "notify::g-name-owner", + self->sig_id_1 = g_signal_connect (self->proxy, "notify::g-name-owner", G_CALLBACK (name_owner_cb), self); - self->sig_id_2 = _nm_dbus_signal_connect (self->sd_proxy, "PrepareForSleep", + self->sig_id_2 = _nm_dbus_signal_connect (self->proxy, "PrepareForSleep", G_VARIANT_TYPE ("(b)"), G_CALLBACK (prepare_for_sleep_cb), self); - owner = g_dbus_proxy_get_name_owner (self->sd_proxy); + owner = g_dbus_proxy_get_name_owner (self->proxy); if (owner) take_inhibitor (self); g_free (owner); @@ -267,10 +267,10 @@ dispose (GObject *object) /* drop_inhibitor() also clears our "cancellable" */ drop_inhibitor (self); - if (self->sd_proxy) { - nm_clear_g_signal_handler (self->sd_proxy, &self->sig_id_1); - nm_clear_g_signal_handler (self->sd_proxy, &self->sig_id_2); - g_clear_object (&self->sd_proxy); + if (self->proxy) { + nm_clear_g_signal_handler (self->proxy, &self->sig_id_1); + nm_clear_g_signal_handler (self->proxy, &self->sig_id_2); + g_clear_object (&self->proxy); } G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->dispose (object); From 025af2a55f4cd959509f3392623c092f707ba6ab Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 16:49:45 +0200 Subject: [PATCH 03/11] sleep-monitor: rename file "nm-sleep-monitor-systemd.c" to "nm-sleep-monitor.c" Next, we will merge "nm-sleep-monitor-upower.c" into "nm-sleep-monitor.c". (cherry picked from commit b97ae183793e380275f4a6331278b088de9e264f) --- src/Makefile.am | 2 +- src/{nm-sleep-monitor-systemd.c => nm-sleep-monitor.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{nm-sleep-monitor-systemd.c => nm-sleep-monitor.c} (100%) diff --git a/src/Makefile.am b/src/Makefile.am index aa35eefbab..ed25815c55 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -450,7 +450,7 @@ if SUSPEND_RESUME_UPOWER libNetworkManager_la_SOURCES += nm-sleep-monitor-upower.c else # systemd/consolekit suspend/resume used whenever upower is not enabled -libNetworkManager_la_SOURCES += nm-sleep-monitor-systemd.c +libNetworkManager_la_SOURCES += nm-sleep-monitor.c endif if WITH_WEXT diff --git a/src/nm-sleep-monitor-systemd.c b/src/nm-sleep-monitor.c similarity index 100% rename from src/nm-sleep-monitor-systemd.c rename to src/nm-sleep-monitor.c From 6b1431b9ac3185c24e44fc355e66635603476752 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 24 May 2016 15:13:55 +0200 Subject: [PATCH 04/11] sleep-monitor: merge "nm-sleep-monitor-upower.c" into "nm-sleep-monitor.c" Both files do very similar things, with "nm-sleep-monitor-upower.c" being suboptimal, for example by creating the proxy synchronously. Clean that up in the next steps. Just basic merging for now. (cherry picked from commit c76eb3e8f7a80b69c570b513ee3eb16bea1b34bd) --- src/Makefile.am | 8 +- src/nm-sleep-monitor-upower.c | 135 ---------------------------------- src/nm-sleep-monitor.c | 64 +++++++++++++++- 3 files changed, 63 insertions(+), 144 deletions(-) delete mode 100644 src/nm-sleep-monitor-upower.c diff --git a/src/Makefile.am b/src/Makefile.am index ed25815c55..652aae6f9b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -438,6 +438,7 @@ libNetworkManager_la_SOURCES = \ nm-rfkill-manager.h \ nm-session-monitor.h \ nm-session-monitor.c \ + nm-sleep-monitor.c \ nm-sleep-monitor.h \ nm-types.h \ nm-core-utils.c \ @@ -446,13 +447,6 @@ libNetworkManager_la_SOURCES = \ NetworkManagerUtils.h -if SUSPEND_RESUME_UPOWER -libNetworkManager_la_SOURCES += nm-sleep-monitor-upower.c -else -# systemd/consolekit suspend/resume used whenever upower is not enabled -libNetworkManager_la_SOURCES += nm-sleep-monitor.c -endif - if WITH_WEXT libNetworkManager_la_SOURCES += \ platform/wifi/wifi-utils-wext.c \ diff --git a/src/nm-sleep-monitor-upower.c b/src/nm-sleep-monitor-upower.c deleted file mode 100644 index 8d0719039c..0000000000 --- a/src/nm-sleep-monitor-upower.c +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * (C) Copyright 2012 Red Hat, Inc. - * Author: Matthias Clasen - */ - -#include "nm-default.h" - -#include -#include -#include - -#include "nm-core-internal.h" -#include "NetworkManagerUtils.h" - -#include "nm-sleep-monitor.h" - -#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower" - -struct _NMSleepMonitor { - GObject parent_instance; - - GDBusProxy *upower_proxy; -}; - -struct _NMSleepMonitorClass { - GObjectClass parent_class; - - void (*sleeping) (NMSleepMonitor *monitor); - void (*resuming) (NMSleepMonitor *monitor); -}; - - -enum { - SLEEPING, - RESUMING, - LAST_SIGNAL, -}; -static guint signals[LAST_SIGNAL] = {0}; - -G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT); - -/********************************************************************/ - -static void -upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data) -{ - nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal"); - g_signal_emit (user_data, signals[SLEEPING], 0); -} - -static void -upower_resuming_cb (GDBusProxy *proxy, gpointer user_data) -{ - nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal"); - g_signal_emit (user_data, signals[RESUMING], 0); -} - -static void -nm_sleep_monitor_init (NMSleepMonitor *self) -{ - GError *error = NULL; - - self->upower_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - UPOWER_DBUS_SERVICE, - "/org/freedesktop/UPower", - "org.freedesktop.UPower", - NULL, &error); - if (self->upower_proxy) { - _nm_dbus_signal_connect (self->upower_proxy, "Sleeping", NULL, - G_CALLBACK (upower_sleeping_cb), self); - _nm_dbus_signal_connect (self->upower_proxy, "Resuming", NULL, - G_CALLBACK (upower_resuming_cb), self); - } else { - nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy: %s", error->message); - g_error_free (error); - } -} - -static void -finalize (GObject *object) -{ - NMSleepMonitor *self = NM_SLEEP_MONITOR (object); - - g_clear_object (&self->upower_proxy); - - G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object); -} - -static void -nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) -{ - GObjectClass *gobject_class; - - gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = finalize; - - signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING, - NM_TYPE_SLEEP_MONITOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (NMSleepMonitorClass, sleeping), - NULL, /* accumulator */ - NULL, /* accumulator data */ - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[RESUMING] = g_signal_new (NM_SLEEP_MONITOR_RESUMING, - NM_TYPE_SLEEP_MONITOR, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (NMSleepMonitorClass, resuming), - NULL, /* accumulator */ - NULL, /* accumulator data */ - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); -} - -NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_MONITOR); - -/* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index 9ed0f9d4fd..13a2234db0 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -29,10 +29,12 @@ #include "nm-sleep-monitor.h" -#if defined (SUSPEND_RESUME_SYSTEMD) == defined (SUSPEND_RESUME_CONSOLEKIT) -#error either define SUSPEND_RESUME_SYSTEMD or SUSPEND_RESUME_CONSOLEKIT +#if (defined (SUSPEND_RESUME_SYSTEMD) + defined (SUSPEND_RESUME_CONSOLEKIT) + defined (SUSPEND_RESUME_UPOWER)) != 1 +#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER #endif +#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower" + #ifdef SUSPEND_RESUME_SYSTEMD #define SUSPEND_DBUS_NAME "org.freedesktop.login1" @@ -109,6 +111,24 @@ NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_ /*****************************************************************************/ +#if defined (SUSPEND_RESUME_UPOWER) + +static void +upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data) +{ + nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal"); + g_signal_emit (user_data, signals[SLEEPING], 0); +} + +static void +upower_resuming_cb (GDBusProxy *proxy, gpointer user_data) +{ + nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal"); + g_signal_emit (user_data, signals[RESUMING], 0); +} + +#else + static void drop_inhibitor (NMSleepMonitor *self) { @@ -245,9 +265,32 @@ on_proxy_acquired (GObject *object, g_free (owner); } +#endif + static void nm_sleep_monitor_init (NMSleepMonitor *self) { +#if defined (SUSPEND_RESUME_UPOWER) + GError *error = NULL; + + self->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START + | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + UPOWER_DBUS_SERVICE, + "/org/freedesktop/UPower", + "org.freedesktop.UPower", + NULL, &error); + if (self->proxy) { + _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL, + G_CALLBACK (upower_sleeping_cb), self); + _nm_dbus_signal_connect (self->proxy, "Resuming", NULL, + G_CALLBACK (upower_resuming_cb), self); + } else { + nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy: %s", error->message); + g_error_free (error); + } +#else self->inhibit_fd = -1; self->cancellable = g_cancellable_new (); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, @@ -257,8 +300,20 @@ nm_sleep_monitor_init (NMSleepMonitor *self) SUSPEND_DBUS_NAME, SUSPEND_DBUS_PATH, SUSPEND_DBUS_INTERFACE, self->cancellable, (GAsyncReadyCallback) on_proxy_acquired, self); +#endif } +#if defined (SUSPEND_RESUME_UPOWER) +static void +finalize (GObject *object) +{ + NMSleepMonitor *self = NM_SLEEP_MONITOR (object); + + g_clear_object (&self->proxy); + + G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object); +} +#else static void dispose (GObject *object) { @@ -275,6 +330,7 @@ dispose (GObject *object) G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->dispose (object); } +#endif static void nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) @@ -283,7 +339,11 @@ nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) gobject_class = G_OBJECT_CLASS (klass); +#if defined (SUSPEND_RESUME_UPOWER) + gobject_class->finalize = finalize; +#else gobject_class->dispose = dispose; +#endif signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING, NM_TYPE_SLEEP_MONITOR, From 4e7d3b05464abaa0f4bc51dc8edf72082e990117 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 17:11:06 +0200 Subject: [PATCH 05/11] sleep-monitor: use dispose() method for upower's sleep-monitor (cherry picked from commit 6864a7036f6ea8aa441e411b57962e9b5829a150) --- src/nm-sleep-monitor.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index 13a2234db0..b3fc0ac9fd 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -272,7 +272,10 @@ nm_sleep_monitor_init (NMSleepMonitor *self) { #if defined (SUSPEND_RESUME_UPOWER) GError *error = NULL; +#endif + self->inhibit_fd = -1; +#if defined (SUSPEND_RESUME_UPOWER) self->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, @@ -291,7 +294,6 @@ nm_sleep_monitor_init (NMSleepMonitor *self) g_error_free (error); } #else - self->inhibit_fd = -1; self->cancellable = g_cancellable_new (); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | @@ -303,24 +305,16 @@ nm_sleep_monitor_init (NMSleepMonitor *self) #endif } -#if defined (SUSPEND_RESUME_UPOWER) -static void -finalize (GObject *object) -{ - NMSleepMonitor *self = NM_SLEEP_MONITOR (object); - - g_clear_object (&self->proxy); - - G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object); -} -#else static void dispose (GObject *object) { NMSleepMonitor *self = NM_SLEEP_MONITOR (object); - /* drop_inhibitor() also clears our "cancellable" */ +#if ! defined (SUSPEND_RESUME_UPOWER) drop_inhibitor (self); +#endif + + nm_clear_g_cancellable (&self->cancellable); if (self->proxy) { nm_clear_g_signal_handler (self->proxy, &self->sig_id_1); @@ -330,7 +324,6 @@ dispose (GObject *object) G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->dispose (object); } -#endif static void nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) @@ -339,11 +332,7 @@ nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) gobject_class = G_OBJECT_CLASS (klass); -#if defined (SUSPEND_RESUME_UPOWER) - gobject_class->finalize = finalize; -#else gobject_class->dispose = dispose; -#endif signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING, NM_TYPE_SLEEP_MONITOR, From 1242147efae1da5bab8c5658b451b24b0a9dec4d Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 17:15:29 +0200 Subject: [PATCH 06/11] sleep-monitor: use defines for D-Bus paths for upower's sleep-monitor (cherry picked from commit 400e9fc9fb0febae9b5ebc5e59d1d695cfe9faf9) --- src/nm-sleep-monitor.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index b3fc0ac9fd..d9551a7bce 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -29,19 +29,20 @@ #include "nm-sleep-monitor.h" -#if (defined (SUSPEND_RESUME_SYSTEMD) + defined (SUSPEND_RESUME_CONSOLEKIT) + defined (SUSPEND_RESUME_UPOWER)) != 1 -#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER -#endif -#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower" +#if defined (SUSPEND_RESUME_UPOWER) -#ifdef SUSPEND_RESUME_SYSTEMD +#define SUSPEND_DBUS_NAME "org.freedesktop.UPower" +#define SUSPEND_DBUS_PATH "/org/freedesktop/UPower" +#define SUSPEND_DBUS_INTERFACE "org.freedesktop.UPower" + +#elif defined (SUSPEND_RESUME_SYSTEMD) #define SUSPEND_DBUS_NAME "org.freedesktop.login1" #define SUSPEND_DBUS_PATH "/org/freedesktop/login1" #define SUSPEND_DBUS_INTERFACE "org.freedesktop.login1.Manager" -#else +#elif defined(SUSPEND_RESUME_CONSOLEKIT) /* ConsoleKit2 has added the same suspend/resume DBUS API that Systemd * uses. http://consolekit2.github.io/ConsoleKit2/#Manager.Inhibit @@ -51,6 +52,10 @@ #define SUSPEND_DBUS_PATH "/org/freedesktop/ConsoleKit/Manager" #define SUSPEND_DBUS_INTERFACE "org.freedesktop.ConsoleKit.Manager" +#else + +#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER + #endif struct _NMSleepMonitor { @@ -280,9 +285,9 @@ nm_sleep_monitor_init (NMSleepMonitor *self) G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, - UPOWER_DBUS_SERVICE, - "/org/freedesktop/UPower", - "org.freedesktop.UPower", + SUSPEND_DBUS_NAME, + SUSPEND_DBUS_PATH, + SUSPEND_DBUS_INTERFACE, NULL, &error); if (self->proxy) { _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL, From 90733d970df179d260eb3ffa70949fa8d93babed Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 17:19:31 +0200 Subject: [PATCH 07/11] sleep-monitor: cleanup #if usage by using USE_UPOWER in "nm-sleep-monitor.c" (cherry picked from commit 2b087b478232561c76d68fd41d60f811a3d7b233) --- src/nm-sleep-monitor.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index d9551a7bce..5a450e2ad8 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -35,12 +35,16 @@ #define SUSPEND_DBUS_NAME "org.freedesktop.UPower" #define SUSPEND_DBUS_PATH "/org/freedesktop/UPower" #define SUSPEND_DBUS_INTERFACE "org.freedesktop.UPower" +#define USE_UPOWER 1 +#define _NMLOG_PREFIX_NAME "sleep-monitor-up" #elif defined (SUSPEND_RESUME_SYSTEMD) #define SUSPEND_DBUS_NAME "org.freedesktop.login1" #define SUSPEND_DBUS_PATH "/org/freedesktop/login1" #define SUSPEND_DBUS_INTERFACE "org.freedesktop.login1.Manager" +#define USE_UPOWER 0 +#define _NMLOG_PREFIX_NAME "sleep-monitor-sd" #elif defined(SUSPEND_RESUME_CONSOLEKIT) @@ -51,6 +55,8 @@ #define SUSPEND_DBUS_NAME "org.freedesktop.ConsoleKit" #define SUSPEND_DBUS_PATH "/org/freedesktop/ConsoleKit/Manager" #define SUSPEND_DBUS_INTERFACE "org.freedesktop.ConsoleKit.Manager" +#define USE_UPOWER 0 +#define _NMLOG_PREFIX_NAME "sleep-monitor-ck" #else @@ -89,12 +95,6 @@ NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_ /*****************************************************************************/ -#ifdef SUSPEND_RESUME_SYSTEMD -#define _NMLOG_PREFIX_NAME "sleep-monitor-sd" -#else -#define _NMLOG_PREFIX_NAME "sleep-monitor-ck" -#endif - #define _NMLOG_DOMAIN LOGD_SUSPEND #define _NMLOG(level, ...) \ G_STMT_START { \ @@ -116,7 +116,7 @@ NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_ /*****************************************************************************/ -#if defined (SUSPEND_RESUME_UPOWER) +#if USE_UPOWER static void upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data) @@ -275,12 +275,12 @@ on_proxy_acquired (GObject *object, static void nm_sleep_monitor_init (NMSleepMonitor *self) { -#if defined (SUSPEND_RESUME_UPOWER) +#if USE_UPOWER GError *error = NULL; #endif self->inhibit_fd = -1; -#if defined (SUSPEND_RESUME_UPOWER) +#if USE_UPOWER self->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, @@ -315,7 +315,7 @@ dispose (GObject *object) { NMSleepMonitor *self = NM_SLEEP_MONITOR (object); -#if ! defined (SUSPEND_RESUME_UPOWER) +#if !USE_UPOWER drop_inhibitor (self); #endif From 546b1613679be1b8983c815432e6e6470da144e1 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 17:28:56 +0200 Subject: [PATCH 08/11] sleep-monitor: create D-Bus proxy asynchronously for upower sleep-monitor (cherry picked from commit a22851dc59e900767ad3adc020e25f246f30f9de) --- src/nm-sleep-monitor.c | 49 ++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index 5a450e2ad8..7da6a38118 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -132,7 +132,7 @@ upower_resuming_cb (GDBusProxy *proxy, gpointer user_data) g_signal_emit (user_data, signals[RESUMING], 0); } -#else +#else /* USE_UPOWER */ static void drop_inhibitor (NMSleepMonitor *self) @@ -238,6 +238,7 @@ name_owner_cb (GObject *object, drop_inhibitor (self); g_free (owner); } +#endif /* USE_UPOWER */ static void on_proxy_acquired (GObject *object, @@ -245,60 +246,43 @@ on_proxy_acquired (GObject *object, NMSleepMonitor *self) { GError *error = NULL; - char *owner; GDBusProxy *proxy; proxy = g_dbus_proxy_new_for_bus_finish (res, &error); if (!proxy) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - _LOGW ("Failed to acquire logind proxy: %s", error->message); + _LOGW ("Failed to acquire D-Bus proxy: %s", error->message); g_clear_error (&error); return; } self->proxy = proxy; g_clear_object (&self->cancellable); +#if USE_UPOWER + self->sig_id_1 = _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL, + G_CALLBACK (upower_sleeping_cb), self); + self->sig_id_2 = _nm_dbus_signal_connect (self->proxy, "Resuming", NULL, + G_CALLBACK (upower_resuming_cb), self); +#else self->sig_id_1 = g_signal_connect (self->proxy, "notify::g-name-owner", G_CALLBACK (name_owner_cb), self); self->sig_id_2 = _nm_dbus_signal_connect (self->proxy, "PrepareForSleep", G_VARIANT_TYPE ("(b)"), G_CALLBACK (prepare_for_sleep_cb), self); + { + gs_free char *owner = NULL; - owner = g_dbus_proxy_get_name_owner (self->proxy); - if (owner) - take_inhibitor (self); - g_free (owner); -} - + owner = g_dbus_proxy_get_name_owner (self->proxy); + if (owner) + take_inhibitor (self); + } #endif +} static void nm_sleep_monitor_init (NMSleepMonitor *self) { -#if USE_UPOWER - GError *error = NULL; -#endif - self->inhibit_fd = -1; -#if USE_UPOWER - self->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START - | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - SUSPEND_DBUS_NAME, - SUSPEND_DBUS_PATH, - SUSPEND_DBUS_INTERFACE, - NULL, &error); - if (self->proxy) { - _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL, - G_CALLBACK (upower_sleeping_cb), self); - _nm_dbus_signal_connect (self->proxy, "Resuming", NULL, - G_CALLBACK (upower_resuming_cb), self); - } else { - nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy: %s", error->message); - g_error_free (error); - } -#else self->cancellable = g_cancellable_new (); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | @@ -307,7 +291,6 @@ nm_sleep_monitor_init (NMSleepMonitor *self) SUSPEND_DBUS_NAME, SUSPEND_DBUS_PATH, SUSPEND_DBUS_INTERFACE, self->cancellable, (GAsyncReadyCallback) on_proxy_acquired, self); -#endif } static void From af36df22625f8b8a11a95f9f89caba2760387366 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 17:35:21 +0200 Subject: [PATCH 09/11] sleep-monitor: unify and cleanup logging (cherry picked from commit 2208ca372603dc276eb9128a678fd1f9667d09d0) --- src/nm-sleep-monitor.c | 59 +++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index 7da6a38118..af9bf6fbfd 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -13,12 +13,14 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2012 Red Hat, Inc. + * (C) Copyright 2012-2016 Red Hat, Inc. * Author: Matthias Clasen */ #include "nm-default.h" +#include "nm-sleep-monitor.h" + #include #include #include @@ -27,8 +29,6 @@ #include "nm-core-internal.h" #include "NetworkManagerUtils.h" -#include "nm-sleep-monitor.h" - #if defined (SUSPEND_RESUME_UPOWER) @@ -93,6 +93,8 @@ G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT); NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_MONITOR); +static void sleep_signal (NMSleepMonitor *self, gboolean is_about_to_suspend); + /*****************************************************************************/ #define _NMLOG_DOMAIN LOGD_SUSPEND @@ -121,15 +123,13 @@ NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_ static void upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data) { - nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal"); - g_signal_emit (user_data, signals[SLEEPING], 0); + sleep_signal (user_data, TRUE); } static void upower_resuming_cb (GDBusProxy *proxy, gpointer user_data) { - nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal"); - g_signal_emit (user_data, signals[RESUMING], 0); + sleep_signal (user_data, FALSE); } #else /* USE_UPOWER */ @@ -138,7 +138,7 @@ static void drop_inhibitor (NMSleepMonitor *self) { if (self->inhibit_fd >= 0) { - _LOGD ("Dropping systemd sleep inhibitor %d", self->inhibit_fd); + _LOGD ("inhibit: dropping sleep inhibitor %d", self->inhibit_fd); close (self->inhibit_fd); self->inhibit_fd = -1; } @@ -161,7 +161,7 @@ inhibit_done (GObject *source, if (!res) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_clear_object (&self->cancellable); - _LOGW ("Inhibit failed: %s", error->message); + _LOGW ("inhibit: failed (%s)", error->message); } return; } @@ -169,12 +169,12 @@ inhibit_done (GObject *source, g_clear_object (&self->cancellable); if (!fd_list || g_unix_fd_list_get_length (fd_list) != 1) { - _LOGW ("Didn't get a single fd back"); + _LOGW ("inhibit: didn't get a single fd back"); return; } self->inhibit_fd = g_unix_fd_list_get (fd_list, 0, NULL); - _LOGD ("Inhibitor fd is %d", self->inhibit_fd); + _LOGD ("inhibit: inhibitor fd is %d", self->inhibit_fd); } static void @@ -185,7 +185,7 @@ take_inhibitor (NMSleepMonitor *self) drop_inhibitor (self); - _LOGD ("Taking systemd sleep inhibitor"); + _LOGD ("inhibit: taking sleep inhibitor..."); self->cancellable = g_cancellable_new (); g_dbus_proxy_call_with_unix_fd_list (self->proxy, "Inhibit", @@ -207,17 +207,7 @@ prepare_for_sleep_cb (GDBusProxy *proxy, gboolean is_about_to_suspend, gpointer data) { - NMSleepMonitor *self = data; - - _LOGD ("Received PrepareForSleep signal: %d", is_about_to_suspend); - - if (is_about_to_suspend) { - g_signal_emit (self, signals[SLEEPING], 0); - drop_inhibitor (self); - } else { - take_inhibitor (self); - g_signal_emit (self, signals[RESUMING], 0); - } + sleep_signal (data, is_about_to_suspend); } static void @@ -240,6 +230,27 @@ name_owner_cb (GObject *object, } #endif /* USE_UPOWER */ +static void +sleep_signal (NMSleepMonitor *self, + gboolean is_about_to_suspend) +{ + g_return_if_fail (NM_IS_SLEEP_MONITOR (self)); + + _LOGD ("received %s signal", is_about_to_suspend ? "SLEEP" : "RESUME"); + + if (is_about_to_suspend) { + g_signal_emit (self, signals[SLEEPING], 0); +#if !USE_UPOWER + drop_inhibitor (self); +#endif + } else { +#if !USE_UPOWER + take_inhibitor (self); +#endif + g_signal_emit (self, signals[RESUMING], 0); + } +} + static void on_proxy_acquired (GObject *object, GAsyncResult *res, @@ -251,7 +262,7 @@ on_proxy_acquired (GObject *object, proxy = g_dbus_proxy_new_for_bus_finish (res, &error); if (!proxy) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - _LOGW ("Failed to acquire D-Bus proxy: %s", error->message); + _LOGW ("failed to acquire D-Bus proxy: %s", error->message); g_clear_error (&error); return; } From ee561f8e894f4e7c7b2ac6e97e74eb4856b1d3b8 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 27 Apr 2016 18:21:28 +0200 Subject: [PATCH 10/11] sleep-monitor: merge RESUMING signal into NMSleepMonitor's SLEEPING signal Having two signals is more complicated and everybody who cares about one signal also cares about the other. (cherry picked from commit 07db1217a9dad4610b3d556c38947ac66129b537) --- src/nm-manager.c | 18 +++--------------- src/nm-sleep-monitor.c | 27 ++++++++++----------------- src/nm-sleep-monitor.h | 6 +----- 3 files changed, 14 insertions(+), 37 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index aafb4c52e9..2b931705b5 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -4071,21 +4071,12 @@ impl_manager_sleep (NMManager *self, } static void -sleeping_cb (NMSleepMonitor *monitor, gpointer user_data) +sleeping_cb (NMSleepMonitor *monitor, gboolean is_about_to_suspend, gpointer user_data) { NMManager *self = user_data; - _LOGD (LOGD_SUSPEND, "Received sleeping signal"); - _internal_sleep (self, TRUE); -} - -static void -resuming_cb (NMSleepMonitor *monitor, gpointer user_data) -{ - NMManager *self = user_data; - - _LOGD (LOGD_SUSPEND, "Received resuming signal"); - _internal_sleep (self, FALSE); + _LOGD (LOGD_SUSPEND, "Received %s signal", is_about_to_suspend ? "sleeping" : "resuming"); + _internal_sleep (self, is_about_to_suspend); } static void @@ -5276,8 +5267,6 @@ nm_manager_init (NMManager *self) priv->sleep_monitor = g_object_ref (nm_sleep_monitor_get ()); g_signal_connect (priv->sleep_monitor, NM_SLEEP_MONITOR_SLEEPING, G_CALLBACK (sleeping_cb), self); - g_signal_connect (priv->sleep_monitor, NM_SLEEP_MONITOR_RESUMING, - G_CALLBACK (resuming_cb), self); /* Listen for authorization changes */ g_signal_connect (nm_auth_manager_get (), @@ -5533,7 +5522,6 @@ dispose (GObject *object) if (priv->sleep_monitor) { g_signal_handlers_disconnect_by_func (priv->sleep_monitor, sleeping_cb, manager); - g_signal_handlers_disconnect_by_func (priv->sleep_monitor, resuming_cb, manager); g_clear_object (&priv->sleep_monitor); } diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index af9bf6fbfd..bc87743bf7 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -84,7 +84,6 @@ struct _NMSleepMonitorClass { enum { SLEEPING, - RESUMING, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL] = {0}; @@ -238,17 +237,17 @@ sleep_signal (NMSleepMonitor *self, _LOGD ("received %s signal", is_about_to_suspend ? "SLEEP" : "RESUME"); - if (is_about_to_suspend) { - g_signal_emit (self, signals[SLEEPING], 0); -#if !USE_UPOWER - drop_inhibitor (self); -#endif - } else { #if !USE_UPOWER + if (!is_about_to_suspend) take_inhibitor (self); #endif - g_signal_emit (self, signals[RESUMING], 0); - } + + g_signal_emit (self, signals[SLEEPING], 0, is_about_to_suspend); + +#if !USE_UPOWER + if (is_about_to_suspend) + drop_inhibitor (self); +#endif } static void @@ -337,13 +336,7 @@ nm_sleep_monitor_class_init (NMSleepMonitorClass *klass) NM_TYPE_SLEEP_MONITOR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[RESUMING] = g_signal_new (NM_SLEEP_MONITOR_RESUMING, - NM_TYPE_SLEEP_MONITOR, - G_SIGNAL_RUN_LAST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); } diff --git a/src/nm-sleep-monitor.h b/src/nm-sleep-monitor.h index 21e6b844c8..222193ed19 100644 --- a/src/nm-sleep-monitor.h +++ b/src/nm-sleep-monitor.h @@ -13,16 +13,13 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * (C) Copyright 2012 Red Hat, Inc. + * (C) Copyright 2012-2016 Red Hat, Inc. * Author: Matthias Clasen */ #ifndef __NETWORKMANAGER_SLEEP_MONITOR_H__ #define __NETWORKMANAGER_SLEEP_MONITOR_H__ - -#include "nm-default.h" - G_BEGIN_DECLS #define NM_TYPE_SLEEP_MONITOR (nm_sleep_monitor_get_type ()) @@ -33,7 +30,6 @@ G_BEGIN_DECLS #define NM_IS_SLEEP_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_SLEEP_MONITOR)) #define NM_SLEEP_MONITOR_SLEEPING "sleeping" -#define NM_SLEEP_MONITOR_RESUMING "resuming" typedef struct _NMSleepMonitorClass NMSleepMonitorClass; From df245d79770bd4cca7afbbafad31756f8ac5c9e3 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 28 Apr 2016 13:45:49 +0200 Subject: [PATCH 11/11] sleep-monitor: make sleep-monitor not a singleton The only user of the sleep-monitor singleton was NMManager anyway. Also, even if we ever get more users that are interested in the SLEEPING signal, we would hook them onto NMManager -- because NMManager should collect, coordinate and possibly forward the SLEEPING signal. In no case, another object should react on the SLEEPING signal and thus bypassing the NMManager. (cherry picked from commit 1e3b2cbb77fac8693e267389b3376185861e772d) --- src/nm-manager.c | 2 +- src/nm-sleep-monitor.c | 26 ++++++++++---------------- src/nm-sleep-monitor.h | 2 +- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/nm-manager.c b/src/nm-manager.c index 2b931705b5..138f506dd2 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -5264,7 +5264,7 @@ nm_manager_init (NMManager *self) self); /* sleep/wake handling */ - priv->sleep_monitor = g_object_ref (nm_sleep_monitor_get ()); + priv->sleep_monitor = nm_sleep_monitor_new (); g_signal_connect (priv->sleep_monitor, NM_SLEEP_MONITOR_SLEEPING, G_CALLBACK (sleeping_cb), self); diff --git a/src/nm-sleep-monitor.c b/src/nm-sleep-monitor.c index bc87743bf7..42a61f6fe3 100644 --- a/src/nm-sleep-monitor.c +++ b/src/nm-sleep-monitor.c @@ -90,8 +90,6 @@ static guint signals[LAST_SIGNAL] = {0}; G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT); -NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_MONITOR); - static void sleep_signal (NMSleepMonitor *self, gboolean is_about_to_suspend); /*****************************************************************************/ @@ -99,20 +97,10 @@ static void sleep_signal (NMSleepMonitor *self, gboolean is_about_to_suspend); #define _NMLOG_DOMAIN LOGD_SUSPEND #define _NMLOG(level, ...) \ G_STMT_START { \ - const NMLogLevel __level = (level); \ - \ - if (nm_logging_enabled (__level, _NMLOG_DOMAIN)) { \ - char __prefix[20]; \ - const NMSleepMonitor *const __self = (self); \ - \ - _nm_log (__level, _NMLOG_DOMAIN, 0, \ - "%s%s: " _NM_UTILS_MACRO_FIRST (__VA_ARGS__), \ - _NMLOG_PREFIX_NAME, \ - (!__self || __self == singleton_instance \ - ? "" \ - : nm_sprintf_buf (__prefix, "[%p]", __self)) \ - _NM_UTILS_MACRO_REST (__VA_ARGS__)); \ - } \ + nm_log ((level), _NMLOG_DOMAIN, \ + "%s: " _NM_UTILS_MACRO_FIRST (__VA_ARGS__), \ + _NMLOG_PREFIX_NAME \ + _NM_UTILS_MACRO_REST (__VA_ARGS__)); \ } G_STMT_END /*****************************************************************************/ @@ -303,6 +291,12 @@ nm_sleep_monitor_init (NMSleepMonitor *self) (GAsyncReadyCallback) on_proxy_acquired, self); } +NMSleepMonitor * +nm_sleep_monitor_new (void) +{ + return g_object_new (NM_TYPE_SLEEP_MONITOR, NULL); +} + static void dispose (GObject *object) { diff --git a/src/nm-sleep-monitor.h b/src/nm-sleep-monitor.h index 222193ed19..494a188eae 100644 --- a/src/nm-sleep-monitor.h +++ b/src/nm-sleep-monitor.h @@ -34,7 +34,7 @@ G_BEGIN_DECLS typedef struct _NMSleepMonitorClass NMSleepMonitorClass; GType nm_sleep_monitor_get_type (void) G_GNUC_CONST; -NMSleepMonitor *nm_sleep_monitor_get (void); +NMSleepMonitor *nm_sleep_monitor_new (void); G_END_DECLS