aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrisztian Litkey <krisztian.litkey@nokia.com>2010-07-21 17:21:13 +0300
committerKrisztian Litkey <krisztian.litkey@nokia.com>2010-07-21 17:21:13 +0300
commit4ccf07d429dd829759b2db1b43588bd242fb21bc (patch)
tree383f205793613c878f3d2468897b25a887a507df
parent65801a25ee88e69abb082ec0742dbe57208be180 (diff)
Default to using system bus also in libresource-glib, added call for setting dbus connection.
-rw-r--r--src/resource.c30
-rw-r--r--src/resource.h2
2 files changed, 31 insertions, 1 deletions
diff --git a/src/resource.c b/src/resource.c
index 99a49ac..18c4e70 100644
--- a/src/resource.c
+++ b/src/resource.c
@@ -103,6 +103,8 @@ struct resource_set_s {
static resource_set_t *rslist;
static uint32_t rsid;
static uint32_t reqno;
+static DBusConnection *rsdbus;
+
static DBusConnection *get_dbus(void);
static resconn_t *get_manager(DBusConnection *);
@@ -138,6 +140,25 @@ static void destroy_request(request_t *);
static void resource_log(const char *, ...);
+EXPORT int resource_set_use_dbus(DBusConnection *conn)
+{
+ if (rslist != NULL) {
+ resource_log("refusing D-Bus connection change, has resource sets");
+ return FALSE;
+ }
+
+ if (rsdbus != NULL) {
+ dbus_connection_unref(rsdbus);
+ rsdbus = NULL;
+ }
+
+ if (conn != NULL)
+ rsdbus = dbus_connection_ref(conn);
+
+ return TRUE;
+}
+
+
EXPORT resource_set_t *resource_set_create(const char *klass,
uint32_t mandatory,
uint32_t optional,
@@ -296,15 +317,22 @@ static DBusConnection *get_dbus(void)
DBusError err;
if (dbus == NULL) {
+ if (rsdbus != NULL) {
+ dbus = rsdbus;
+ return dbus;
+ }
+
dbus_error_init(&err);
- dbus = resource_get_dbus_bus(DBUS_BUS_SESSION, &err);
+ dbus = resource_get_dbus_bus(DBUS_BUS_SYSTEM, &err);
if (dbus_error_is_set(&err)) {
/* TODO: some more distinctive errno setting would not harm :) */
errno = EIO;
dbus_error_free(&err);
}
+ else
+ rsdbus = dbus_connection_ref(dbus);
}
return dbus;
diff --git a/src/resource.h b/src/resource.h
index 25e8da2..57098f6 100644
--- a/src/resource.h
+++ b/src/resource.h
@@ -27,6 +27,7 @@ USA.
#include <sys/types.h>
#include <res-types.h>
+#include <dbus/dbus.h>
#ifdef __cplusplus
extern "C" {
@@ -39,6 +40,7 @@ typedef void (*resource_callback_t)(resource_set_t *resource_set,
uint32_t resources,
void *userdata);
+int resource_set_use_dbus(DBusConnection *conn);
resource_set_t *resource_set_create(const char *klass,
uint32_t mandatory,