From 2f3820c6241cb8c400dc9a50aab5f08de1167480 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 4 Aug 2008 22:24:58 +0000 Subject: [PATCH] 2008-08-04 Dan Williams Patch from Sjoerd Simons * src/NetworkManager.c src/nm-manager.c src/nm-manager.h - More explicitly make the NMManager a singleton git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3896 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 9 +++++++++ src/NetworkManager.c | 2 +- src/nm-manager.c | 31 ++++++++++++++++++------------- src/nm-manager.h | 2 +- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 68b2b28548..09f1145a01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-08-04 Dan Williams + + Patch from Sjoerd Simons + + * src/NetworkManager.c + src/nm-manager.c + src/nm-manager.h + - More explicitly make the NMManager a singleton + 2008-08-04 Dan Williams * libnm-util/nm-connection.c diff --git a/src/NetworkManager.c b/src/NetworkManager.c index f6651de16c..9468c94ba0 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -303,7 +303,7 @@ main (int argc, char *argv[]) goto done; } - manager = nm_manager_new (); + manager = nm_manager_get (); if (manager == NULL) { nm_error ("Failed to initialize the network manager."); goto done; diff --git a/src/nm-manager.c b/src/nm-manager.c index 18b165ab9e..4ba0c7ac75 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1353,49 +1353,54 @@ deferred_sync_devices (gpointer user_data) } NMManager * -nm_manager_new (void) +nm_manager_get (void) { - GObject *object; + static NMManager *singleton = NULL; NMManagerPrivate *priv; - object = g_object_new (NM_TYPE_MANAGER, NULL); - priv = NM_MANAGER_GET_PRIVATE (object); + if (singleton) + return g_object_ref (singleton); + + singleton = (NMManager *) g_object_new (NM_TYPE_MANAGER, NULL); + g_assert (singleton); + + priv = NM_MANAGER_GET_PRIVATE (singleton); dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (priv->dbus_mgr), NM_DBUS_PATH, - object); + G_OBJECT (singleton)); g_signal_connect (priv->dbus_mgr, "name-owner-changed", G_CALLBACK (nm_manager_name_owner_changed), - NM_MANAGER (object)); + singleton); - g_idle_add ((GSourceFunc) initial_get_connections, NM_MANAGER (object)); + g_idle_add ((GSourceFunc) initial_get_connections, singleton); priv->hal_mgr = nm_hal_manager_new (); - priv->sync_devices_id = g_idle_add (deferred_sync_devices, object); + priv->sync_devices_id = g_idle_add (deferred_sync_devices, singleton); g_signal_connect (priv->hal_mgr, "udi-added", G_CALLBACK (hal_manager_udi_added_cb), - NM_MANAGER (object)); + singleton); g_signal_connect (priv->hal_mgr, "udi-removed", G_CALLBACK (hal_manager_udi_removed_cb), - NM_MANAGER (object)); + singleton); g_signal_connect (priv->hal_mgr, "rfkill-changed", G_CALLBACK (hal_manager_rfkill_changed_cb), - NM_MANAGER (object)); + singleton); g_signal_connect (priv->hal_mgr, "hal-reappeared", G_CALLBACK (hal_manager_hal_reappeared_cb), - NM_MANAGER (object)); + singleton); - return NM_MANAGER (object); + return singleton; } static void diff --git a/src/nm-manager.h b/src/nm-manager.h index fb53bdd597..fd744325fc 100644 --- a/src/nm-manager.h +++ b/src/nm-manager.h @@ -52,7 +52,7 @@ typedef struct { GType nm_manager_get_type (void); -NMManager *nm_manager_new (void); +NMManager *nm_manager_get (void); /* Device handling */