diff options
author | Krisztian Litkey <krisztian.litkey@nokia.com> | 2010-07-21 17:21:13 +0300 |
---|---|---|
committer | Krisztian Litkey <krisztian.litkey@nokia.com> | 2010-07-21 17:21:13 +0300 |
commit | 4ccf07d429dd829759b2db1b43588bd242fb21bc (patch) | |
tree | 383f205793613c878f3d2468897b25a887a507df | |
parent | 65801a25ee88e69abb082ec0742dbe57208be180 (diff) |
Default to using system bus also in libresource-glib, added call for setting dbus connection.
-rw-r--r-- | src/resource.c | 30 | ||||
-rw-r--r-- | src/resource.h | 2 |
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, |