diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c index 8bf0dc3b4..6bd1d1d0b 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 7230a8d46..1ac7754a3 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__ */