diff --git a/include/nm-macros-internal.h b/include/nm-macros-internal.h index 4f558558b..da6eacaf2 100644 --- a/include/nm-macros-internal.h +++ b/include/nm-macros-internal.h @@ -115,64 +115,6 @@ /*****************************************************************************/ -#define NM_DEFINE_SINGLETON_INSTANCE(TYPE) \ -static TYPE *singleton_instance - -#define NM_DEFINE_SINGLETON_WEAK_REF(TYPE) \ -NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ -static void \ -_singleton_instance_weak_ref_cb (gpointer data, \ - GObject *where_the_object_was) \ -{ \ - nm_log_dbg (LOGD_CORE, "disposing %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ - singleton_instance = NULL; \ -} \ -static inline void \ -nm_singleton_instance_weak_ref_register (void) \ -{ \ - g_object_weak_ref (G_OBJECT (singleton_instance), _singleton_instance_weak_ref_cb, NULL); \ -} - -#define NM_DEFINE_SINGLETON_DESTRUCTOR(TYPE) \ -NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ -static void __attribute__((destructor)) \ -_singleton_destructor (void) \ -{ \ - if (singleton_instance) { \ - if (G_OBJECT (singleton_instance)->ref_count > 1) \ - nm_log_dbg (LOGD_CORE, "disown %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ - g_object_unref (singleton_instance); \ - } \ -} - -/* By default, the getter will assert that the singleton will be created only once. You can - * change this by redefining NM_DEFINE_SINGLETON_ALLOW_MULTIPLE. */ -#ifndef NM_DEFINE_SINGLETON_ALLOW_MULTIPLE -#define NM_DEFINE_SINGLETON_ALLOW_MULTIPLE FALSE -#endif - -#define NM_DEFINE_SINGLETON_GETTER(TYPE, GETTER, GTYPE, ...) \ -NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ -NM_DEFINE_SINGLETON_WEAK_REF (TYPE); \ -TYPE * \ -GETTER (void) \ -{ \ - if (G_UNLIKELY (!singleton_instance)) { \ - static char _already_created = FALSE; \ -\ - g_assert (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)); \ - _already_created = TRUE;\ - singleton_instance = (g_object_new (GTYPE, ##__VA_ARGS__, NULL)); \ - g_assert (singleton_instance); \ - nm_singleton_instance_weak_ref_register (); \ - nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ - } \ - return singleton_instance; \ -} \ -NM_DEFINE_SINGLETON_DESTRUCTOR(TYPE) - -/*****************************************************************************/ - static inline gboolean nm_clear_g_source (guint *id) { diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h index d9adfc097..2ad132b8e 100644 --- a/src/NetworkManagerUtils.h +++ b/src/NetworkManagerUtils.h @@ -29,6 +29,66 @@ #include "nm-connection.h" #include "nm-types.h" +/*****************************************************************************/ + +#define NM_DEFINE_SINGLETON_INSTANCE(TYPE) \ +static TYPE *singleton_instance + +#define NM_DEFINE_SINGLETON_WEAK_REF(TYPE) \ +NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ +static void \ +_singleton_instance_weak_ref_cb (gpointer data, \ + GObject *where_the_object_was) \ +{ \ + nm_log_dbg (LOGD_CORE, "disposing %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ + singleton_instance = NULL; \ +} \ +static inline void \ +nm_singleton_instance_weak_ref_register (void) \ +{ \ + g_object_weak_ref (G_OBJECT (singleton_instance), _singleton_instance_weak_ref_cb, NULL); \ +} + +#define NM_DEFINE_SINGLETON_DESTRUCTOR(TYPE) \ +NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ +static void __attribute__((destructor)) \ +_singleton_destructor (void) \ +{ \ + if (singleton_instance) { \ + if (G_OBJECT (singleton_instance)->ref_count > 1) \ + nm_log_dbg (LOGD_CORE, "disown %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ + g_object_unref (singleton_instance); \ + } \ +} + +/* By default, the getter will assert that the singleton will be created only once. You can + * change this by redefining NM_DEFINE_SINGLETON_ALLOW_MULTIPLE. */ +#ifndef NM_DEFINE_SINGLETON_ALLOW_MULTIPLE +#define NM_DEFINE_SINGLETON_ALLOW_MULTIPLE FALSE +#endif + +#define NM_DEFINE_SINGLETON_GETTER(TYPE, GETTER, GTYPE, ...) \ +NM_DEFINE_SINGLETON_INSTANCE (TYPE); \ +NM_DEFINE_SINGLETON_WEAK_REF (TYPE); \ +TYPE * \ +GETTER (void) \ +{ \ + if (G_UNLIKELY (!singleton_instance)) { \ + static char _already_created = FALSE; \ +\ + g_assert (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)); \ + _already_created = TRUE;\ + singleton_instance = (g_object_new (GTYPE, ##__VA_ARGS__, NULL)); \ + g_assert (singleton_instance); \ + nm_singleton_instance_weak_ref_register (); \ + nm_log_dbg (LOGD_CORE, "create %s singleton (%p)", G_STRINGIFY (TYPE), singleton_instance); \ + } \ + return singleton_instance; \ +} \ +NM_DEFINE_SINGLETON_DESTRUCTOR(TYPE) + +/*****************************************************************************/ + gboolean nm_ethernet_address_is_valid (gconstpointer addr, gssize len); in_addr_t nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen); diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c index bcd1b96d4..3ee088929 100644 --- a/src/nm-auth-manager.c +++ b/src/nm-auth-manager.c @@ -25,6 +25,7 @@ #include "nm-logging.h" #include "nm-errors.h" #include "nm-core-internal.h" +#include "NetworkManagerUtils.h" #define POLKIT_SERVICE "org.freedesktop.PolicyKit1" #define POLKIT_OBJECT_PATH "/org/freedesktop/PolicyKit1/Authority" diff --git a/src/nm-firewall-manager.c b/src/nm-firewall-manager.c index 711b542ec..9bffac759 100644 --- a/src/nm-firewall-manager.c +++ b/src/nm-firewall-manager.c @@ -27,6 +27,7 @@ #include "nm-firewall-manager.h" #include "nm-logging.h" #include "gsystem-local-alloc.h" +#include "NetworkManagerUtils.h" #define NM_FIREWALL_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ NM_TYPE_FIREWALL_MANAGER, \ diff --git a/src/nm-session-monitor.c b/src/nm-session-monitor.c index 80d0bcc45..84436d08b 100644 --- a/src/nm-session-monitor.c +++ b/src/nm-session-monitor.c @@ -30,6 +30,7 @@ #include "nm-glib-compat.h" #include "nm-session-monitor.h" #include "nm-logging.h" +#include "NetworkManagerUtils.h" #ifdef SESSION_TRACKING_SYSTEMD #include diff --git a/src/nm-sleep-monitor-systemd.c b/src/nm-sleep-monitor-systemd.c index 18c847831..1e3a30975 100644 --- a/src/nm-sleep-monitor-systemd.c +++ b/src/nm-sleep-monitor-systemd.c @@ -29,6 +29,7 @@ #include "nm-logging.h" #include "nm-dbus-manager.h" #include "nm-core-internal.h" +#include "NetworkManagerUtils.h" #include "nm-sleep-monitor.h" diff --git a/src/settings/nm-inotify-helper.c b/src/settings/nm-inotify-helper.c index 3732e77a3..2d0210aee 100644 --- a/src/settings/nm-inotify-helper.c +++ b/src/settings/nm-inotify-helper.c @@ -28,6 +28,7 @@ #include "nm-inotify-helper.h" #include "nm-logging.h" +#include "NetworkManagerUtils.h" /* NOTE: this code should be killed once we depend on a new enough glib to * include the patches from https://bugzilla.gnome.org/show_bug.cgi?id=532815