|
|
43fe83 |
From 00c107bc1ef5a9ab3ad04f15d87fa529c17efefb Mon Sep 17 00:00:00 2001
|
|
|
43fe83 |
Message-Id: <00c107bc1ef5a9ab3ad04f15d87fa529c17efefb.1381871412.git.jdenemar@redhat.com>
|
|
|
43fe83 |
From: "Daniel P. Berrange" <berrange@redhat.com>
|
|
|
43fe83 |
Date: Mon, 14 Oct 2013 16:45:17 +0100
|
|
|
43fe83 |
Subject: [PATCH] Allow use of a private dbus bus connection
|
|
|
43fe83 |
|
|
|
43fe83 |
For
|
|
|
43fe83 |
|
|
|
43fe83 |
https://bugzilla.redhat.com/show_bug.cgi?id=998365
|
|
|
43fe83 |
|
|
|
43fe83 |
The dbus_bus_get() function returns a shared bus connection that
|
|
|
43fe83 |
all libraries in a process can use. You are forbidden from calling
|
|
|
43fe83 |
close on this connection though, since you can never know if any
|
|
|
43fe83 |
other code might be using it.
|
|
|
43fe83 |
|
|
|
43fe83 |
Add an option to use private dbus bus connections, if the app
|
|
|
43fe83 |
wants to be able to close the connection.
|
|
|
43fe83 |
|
|
|
43fe83 |
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
|
|
43fe83 |
(cherry picked from commit 0cb774f051a3549dd3968e6f48b36e6f93ac79fc)
|
|
|
43fe83 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
43fe83 |
---
|
|
|
43fe83 |
src/libvirt_private.syms | 1 +
|
|
|
43fe83 |
src/util/virdbus.c | 16 +++++++++++++++-
|
|
|
43fe83 |
src/util/virdbus.h | 2 ++
|
|
|
43fe83 |
3 files changed, 18 insertions(+), 1 deletion(-)
|
|
|
43fe83 |
|
|
|
43fe83 |
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
|
|
43fe83 |
index d9561b8..c91a9f9 100644
|
|
|
43fe83 |
--- a/src/libvirt_private.syms
|
|
|
43fe83 |
+++ b/src/libvirt_private.syms
|
|
|
43fe83 |
@@ -1298,6 +1298,7 @@ virDBusHasSystemBus;
|
|
|
43fe83 |
virDBusMessageDecode;
|
|
|
43fe83 |
virDBusMessageEncode;
|
|
|
43fe83 |
virDBusMessageRead;
|
|
|
43fe83 |
+virDBusSetSharedBus;
|
|
|
43fe83 |
|
|
|
43fe83 |
|
|
|
43fe83 |
# util/virdnsmasq.h
|
|
|
43fe83 |
diff --git a/src/util/virdbus.c b/src/util/virdbus.c
|
|
|
43fe83 |
index a2c4b4e..bcc5b1c 100644
|
|
|
43fe83 |
--- a/src/util/virdbus.c
|
|
|
43fe83 |
+++ b/src/util/virdbus.c
|
|
|
43fe83 |
@@ -32,6 +32,7 @@
|
|
|
43fe83 |
|
|
|
43fe83 |
#ifdef WITH_DBUS
|
|
|
43fe83 |
|
|
|
43fe83 |
+static bool sharedBus = true;
|
|
|
43fe83 |
static DBusConnection *systembus = NULL;
|
|
|
43fe83 |
static DBusConnection *sessionbus = NULL;
|
|
|
43fe83 |
static virOnceControl systemonce = VIR_ONCE_CONTROL_INITIALIZER;
|
|
|
43fe83 |
@@ -43,6 +44,11 @@ static dbus_bool_t virDBusAddWatch(DBusWatch *watch, void *data);
|
|
|
43fe83 |
static void virDBusRemoveWatch(DBusWatch *watch, void *data);
|
|
|
43fe83 |
static void virDBusToggleWatch(DBusWatch *watch, void *data);
|
|
|
43fe83 |
|
|
|
43fe83 |
+void virDBusSetSharedBus(bool shared)
|
|
|
43fe83 |
+{
|
|
|
43fe83 |
+ sharedBus = shared;
|
|
|
43fe83 |
+}
|
|
|
43fe83 |
+
|
|
|
43fe83 |
static DBusConnection *virDBusBusInit(DBusBusType type, DBusError *dbuserr)
|
|
|
43fe83 |
{
|
|
|
43fe83 |
DBusConnection *bus;
|
|
|
43fe83 |
@@ -52,7 +58,10 @@ static DBusConnection *virDBusBusInit(DBusBusType type, DBusError *dbuserr)
|
|
|
43fe83 |
dbus_threads_init_default();
|
|
|
43fe83 |
|
|
|
43fe83 |
dbus_error_init(dbuserr);
|
|
|
43fe83 |
- if (!(bus = dbus_bus_get(type, dbuserr)))
|
|
|
43fe83 |
+ bus = sharedBus ?
|
|
|
43fe83 |
+ dbus_bus_get(type, dbuserr) :
|
|
|
43fe83 |
+ dbus_bus_get_private(type, dbuserr);
|
|
|
43fe83 |
+ if (!bus)
|
|
|
43fe83 |
return NULL;
|
|
|
43fe83 |
|
|
|
43fe83 |
dbus_connection_set_exit_on_disconnect(bus, FALSE);
|
|
|
43fe83 |
@@ -1264,6 +1273,11 @@ int virDBusIsServiceEnabled(const char *name)
|
|
|
43fe83 |
|
|
|
43fe83 |
|
|
|
43fe83 |
#else /* ! WITH_DBUS */
|
|
|
43fe83 |
+void virDBusSetSharedBus(bool shared ATTRIBUTE_UNUSED)
|
|
|
43fe83 |
+{
|
|
|
43fe83 |
+ /* nothing */
|
|
|
43fe83 |
+}
|
|
|
43fe83 |
+
|
|
|
43fe83 |
DBusConnection *virDBusGetSystemBus(void)
|
|
|
43fe83 |
{
|
|
|
43fe83 |
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
|
43fe83 |
diff --git a/src/util/virdbus.h b/src/util/virdbus.h
|
|
|
43fe83 |
index 194a01a..125a405 100644
|
|
|
43fe83 |
--- a/src/util/virdbus.h
|
|
|
43fe83 |
+++ b/src/util/virdbus.h
|
|
|
43fe83 |
@@ -31,6 +31,8 @@
|
|
|
43fe83 |
# endif
|
|
|
43fe83 |
# include "internal.h"
|
|
|
43fe83 |
|
|
|
43fe83 |
+void virDBusSetSharedBus(bool shared);
|
|
|
43fe83 |
+
|
|
|
43fe83 |
DBusConnection *virDBusGetSystemBus(void);
|
|
|
43fe83 |
bool virDBusHasSystemBus(void);
|
|
|
43fe83 |
DBusConnection *virDBusGetSessionBus(void);
|
|
|
43fe83 |
--
|
|
|
43fe83 |
1.8.3.2
|
|
|
43fe83 |
|