Add private _g_bus_get_singleton_if_exists() function
authorXavier Claessens <xavier.claessens@collabora.co.uk>
Fri, 6 Apr 2012 12:51:09 +0000 (14:51 +0200)
committerDavid Zeuthen <davidz@redhat.com>
Wed, 18 Apr 2012 15:19:13 +0000 (11:19 -0400)
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
gio/gdbusprivate.h

index 8bf0dc3..6bd1d1d 100644 (file)
@@ -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.
index 7230a8d..1ac7754 100644 (file)
@@ -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__ */