summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStian Skjelstad <stian@nixia.no>2009-09-18 14:01:00 -0400
committerColin Walters <walters@verbum.org>2009-09-18 14:03:50 -0400
commit980b46870aa0e44a04ad1191d7af1d0601577501 (patch)
treeffe94d7b54c9970d8aa21991a66bb5a0865bb24c
parentc993494ad463ffe55b8603e58aa5ecb6dd731144 (diff)
Bug 19623 - Add dbus_g_bus_get_private
Useful for cases where you have to get a private connection, among them to work around threading issues. Signed-off-by: Colin Walters <walters@verbum.org>
-rw-r--r--dbus/dbus-glib.h3
-rw-r--r--dbus/dbus-gmain.c41
2 files changed, 44 insertions, 0 deletions
diff --git a/dbus/dbus-glib.h b/dbus/dbus-glib.h
index 8f2ed28..d96989c 100644
--- a/dbus/dbus-glib.h
+++ b/dbus/dbus-glib.h
@@ -105,6 +105,9 @@ DBusGConnection* dbus_g_connection_open (const gchar *address,
GError **error);
DBusGConnection* dbus_g_bus_get (DBusBusType type,
GError **error);
+DBusGConnection* dbus_g_bus_get_private (DBusBusType type,
+ GError **error);
+
typedef struct _DBusGObjectInfo DBusGObjectInfo;
typedef struct _DBusGMethodInfo DBusGMethodInfo;
diff --git a/dbus/dbus-gmain.c b/dbus/dbus-gmain.c
index 6a64601..ca66f73 100644
--- a/dbus/dbus-gmain.c
+++ b/dbus/dbus-gmain.c
@@ -765,6 +765,47 @@ dbus_g_bus_get (DBusBusType type,
return DBUS_G_CONNECTION_FROM_CONNECTION (connection);
}
+/**
+ * dbus_g_bus_get_private:
+ * @type: bus type
+ * @error: address where an error can be returned.
+ *
+ * Returns a connection to the given bus. The connection will be a private
+ * non-shared connection and should be closed when usage is complete.
+ *
+ * Internally this function calls dbus_bus_get_private() then calls
+ * dbus_connection_setup_with_g_main() on the result; see the documentation
+ * of the former function for more information on private connections.
+ *
+ * Returns: a DBusConnection
+ */
+DBusGConnection*
+dbus_g_bus_get_private (DBusBusType type,
+ GError **error)
+{
+ DBusConnection *connection;
+ DBusError derror;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ _dbus_g_value_types_init ();
+
+ dbus_error_init (&derror);
+
+ connection = dbus_bus_get_private (type, &derror);
+ if (connection == NULL)
+ {
+ dbus_set_g_error (error, &derror);
+ dbus_error_free (&derror);
+ return NULL;
+ }
+
+ /* does nothing if it's already been done */
+ dbus_connection_setup_with_g_main (connection, NULL);
+
+ return DBUS_G_CONNECTION_FROM_CONNECTION (connection);
+}
+
/** @} */ /* end of public API */
#ifdef DBUS_BUILD_TESTS