#ifdef WITH_DBUS
+static bool sharedBus = true;
static DBusConnection *systembus = NULL;
static DBusConnection *sessionbus = NULL;
static virOnceControl systemonce = VIR_ONCE_CONTROL_INITIALIZER;
static void virDBusRemoveWatch(DBusWatch *watch, void *data);
static void virDBusToggleWatch(DBusWatch *watch, void *data);
+void virDBusSetSharedBus(bool shared)
+{
+ sharedBus = shared;
+}
+
static DBusConnection *virDBusBusInit(DBusBusType type, DBusError *dbuserr)
{
DBusConnection *bus;
dbus_threads_init_default();
dbus_error_init(dbuserr);
- if (!(bus = dbus_bus_get(type, dbuserr)))
+ bus = sharedBus ?
+ dbus_bus_get(type, dbuserr) :
+ dbus_bus_get_private(type, dbuserr);
+ if (!bus)
return NULL;
dbus_connection_set_exit_on_disconnect(bus, FALSE);
#else /* ! WITH_DBUS */
+void virDBusSetSharedBus(bool shared ATTRIBUTE_UNUSED)
+{
+ /* nothing */
+}
+
DBusConnection *virDBusGetSystemBus(void)
{
virReportError(VIR_ERR_INTERNAL_ERROR,
# endif
# include "internal.h"
+void virDBusSetSharedBus(bool shared);
+
DBusConnection *virDBusGetSystemBus(void);
bool virDBusHasSystemBus(void);
DBusConnection *virDBusGetSessionBus(void);