[glib] Add private _g_bus_get_singleton_if_exists() function



commit f8a8e9039889c090fb3323e195730b9e460396e4
Author: Xavier Claessens <xavier claessens collabora co uk>
Date:   Fri Apr 6 14:51:09 2012 +0200

    Add private _g_bus_get_singleton_if_exists() function
    
    This is used by g_test_dbus_down() to ensure the GDBusConnection
    gets disposed, but not create one if the singleton already got
    disposed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=672985

 gio/gdbusconnection.c |   19 +++++++++++++++++++
 gio/gdbusprivate.h    |    3 +++
 2 files changed, 22 insertions(+), 0 deletions(-)
---
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
index 8bf0dc3..6bd1d1d 100644
--- a/gio/gdbusconnection.c
+++ b/gio/gdbusconnection.c
@@ -6769,6 +6769,25 @@ get_uninitialized_connection (GBusType       bus_type,
   return ret;
 }
 
+/* Called in any user thread, without holding locks. */
+GDBusConnection *
+_g_bus_get_singleton_if_exists (GBusType bus_type)
+{
+  GWeakRef *singleton;
+  GDBusConnection *ret = NULL;
+
+  G_LOCK (message_bus_lock);
+  singleton = message_bus_get_singleton (bus_type, NULL);
+  if (singleton == NULL)
+    goto out;
+
+  ret = g_weak_ref_get (singleton);
+
+ out:
+  G_UNLOCK (message_bus_lock);
+  return ret;
+}
+
 /**
  * g_bus_get_sync:
  * @bus_type: A #GBusType.
diff --git a/gio/gdbusprivate.h b/gio/gdbusprivate.h
index 7230a8d..1ac7754 100644
--- a/gio/gdbusprivate.h
+++ b/gio/gdbusprivate.h
@@ -143,6 +143,9 @@ void _g_dbus_object_proxy_add_interface (GDBusObjectProxy *proxy,
 void _g_dbus_object_proxy_remove_interface (GDBusObjectProxy *proxy,
                                             const gchar      *interface_name);
 
+/* Implemented in gdbusconnection.c */
+GDBusConnection *_g_bus_get_singleton_if_exists (GBusType bus_type);
+
 G_END_DECLS
 
 #endif /* __G_DBUS_PRIVATE_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]