Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 636737 Details for
Bug 872254
user libvirtd need to shut down cleanly when the session dies
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
session dbus integration support
libvirt-dbus.patch (text/plain), 7.58 KB, created by
Alexander Larsson
on 2012-11-01 16:17:21 UTC
(
hide
)
Description:
session dbus integration support
Filename:
MIME Type:
Creator:
Alexander Larsson
Created:
2012-11-01 16:17:21 UTC
Size:
7.58 KB
patch
obsolete
>Return-Path: alexl@redhat.com >Received: from zmta04.collab.prod.int.phx2.redhat.com (LHLO > zmta04.collab.prod.int.phx2.redhat.com) (10.5.81.11) by > zmail20.collab.prod.int.phx2.redhat.com with LMTP; Tue, 9 Oct 2012 11:26:38 > -0400 (EDT) >Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) > by zmta04.collab.prod.int.phx2.redhat.com (Postfix) with ESMTP id D4096D0927 > for <alexl@mail.corp.redhat.com>; Tue, 9 Oct 2012 11:26:38 -0400 (EDT) >Received: from localhost.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) > by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q99FQV93016417; > Tue, 9 Oct 2012 11:26:33 -0400 >From: Alexander Larsson <alexl@redhat.com> >To: libvir-list@redhat.com >Cc: Alexander Larsson <alexl@redhat.com> >Subject: [PATCH 1/2] virdbus: Add virDBusGetSessionBus helper >Date: Tue, 9 Oct 2012 17:26:28 +0200 >Message-Id: <1349796389-6122-2-git-send-email-alexl@redhat.com> >In-Reply-To: <1349796389-6122-1-git-send-email-alexl@redhat.com> >References: <1349796389-6122-1-git-send-email-alexl@redhat.com> >X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 > >This splits out some common code from virDBusGetSystemBus and >uses it to implement a new virDBusGetSessionBus helper. >--- > src/libvirt_private.syms | 1 + > src/util/virdbus.c | 84 ++++++++++++++++++++++++++++++++++++------------ > src/util/virdbus.h | 1 + > 3 files changed, 66 insertions(+), 20 deletions(-) > >diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >index a8c81e7..88f1b2f 100644 >--- a/src/libvirt_private.syms >+++ b/src/libvirt_private.syms >@@ -1310,6 +1310,7 @@ virConsoleOpen; > > # virdbus.h > virDBusGetSystemBus; >+virDBusGetSessionBus; > > > # virdomainlist.h >diff --git a/src/util/virdbus.c b/src/util/virdbus.c >index 4acce12..2dc7265 100644 >--- a/src/util/virdbus.c >+++ b/src/util/virdbus.c >@@ -32,40 +32,49 @@ > #ifdef HAVE_DBUS > > static DBusConnection *systembus = NULL; >-static virOnceControl once = VIR_ONCE_CONTROL_INITIALIZER; >-static DBusError dbuserr; >+static DBusConnection *sessionbus = NULL; >+static virOnceControl systemonce = VIR_ONCE_CONTROL_INITIALIZER; >+static virOnceControl sessiononce = VIR_ONCE_CONTROL_INITIALIZER; >+static DBusError systemdbuserr; >+static DBusError sessiondbuserr; > > static dbus_bool_t virDBusAddWatch(DBusWatch *watch, void *data); > static void virDBusRemoveWatch(DBusWatch *watch, void *data); > static void virDBusToggleWatch(DBusWatch *watch, void *data); > >-static void virDBusSystemBusInit(void) >+static DBusConnection *virDBusBusInit(DBusBusType type, DBusError *dbuserr) > { >+ DBusConnection *bus; >+ > /* Allocate and initialize a new HAL context */ > dbus_connection_set_change_sigpipe(FALSE); > dbus_threads_init_default(); > >- dbus_error_init(&dbuserr); >- if (!(systembus = dbus_bus_get(DBUS_BUS_SYSTEM, &dbuserr))) >- return; >+ dbus_error_init(dbuserr); >+ if (!(bus = dbus_bus_get(type, dbuserr))) >+ return NULL; > >- dbus_connection_set_exit_on_disconnect(systembus, FALSE); >+ dbus_connection_set_exit_on_disconnect(bus, FALSE); > > /* Register dbus watch callbacks */ >- if (!dbus_connection_set_watch_functions(systembus, >+ if (!dbus_connection_set_watch_functions(bus, > virDBusAddWatch, > virDBusRemoveWatch, > virDBusToggleWatch, >- NULL, NULL)) { >- systembus = NULL; >- return; >+ bus, NULL)) { >+ return NULL; > } >+ return bus; > } > >+static void virDBusSystemBusInit(void) >+{ >+ systembus = virDBusBusInit (DBUS_BUS_SYSTEM, &systemdbuserr); >+} > > DBusConnection *virDBusGetSystemBus(void) > { >- if (virOnce(&once, virDBusSystemBusInit) < 0) { >+ if (virOnce(&systemonce, virDBusSystemBusInit) < 0) { > virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > _("Unable to run one time DBus initializer")); > return NULL; >@@ -74,7 +83,7 @@ DBusConnection *virDBusGetSystemBus(void) > if (!systembus) { > virReportError(VIR_ERR_INTERNAL_ERROR, > _("Unable to get DBus system bus connection: %s"), >- dbuserr.message ? dbuserr.message : "watch setup failed"); >+ systemdbuserr.message ? systemdbuserr.message : "watch setup failed"); > return NULL; > } > >@@ -82,13 +91,45 @@ DBusConnection *virDBusGetSystemBus(void) > } > > >+static void virDBusSessionBusInit(void) >+{ >+ sessionbus = virDBusBusInit (DBUS_BUS_SESSION, &sessiondbuserr); >+} >+ >+DBusConnection *virDBusGetSessionBus(void) >+{ >+ if (virOnce(&sessiononce, virDBusSessionBusInit) < 0) { >+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >+ _("Unable to run one time DBus initializer")); >+ return NULL; >+ } >+ >+ if (!sessionbus) { >+ virReportError(VIR_ERR_INTERNAL_ERROR, >+ _("Unable to get DBus session bus connection: %s"), >+ sessiondbuserr.message ? sessiondbuserr.message : "watch setup failed"); >+ return NULL; >+ } >+ >+ return sessionbus; >+} >+ >+struct virDBusWatch >+{ >+ int watch; >+ DBusConnection *bus; >+}; >+ > static void virDBusWatchCallback(int fdatch ATTRIBUTE_UNUSED, > int fd ATTRIBUTE_UNUSED, > int events, void *opaque) > { > DBusWatch *watch = opaque; >+ struct virDBusWatch *info; > int dbus_flags = 0; > >+ info = dbus_watch_get_data(watch); >+ > if (events & VIR_EVENT_HANDLE_READABLE) > dbus_flags |= DBUS_WATCH_READABLE; > if (events & VIR_EVENT_HANDLE_WRITABLE) >@@ -100,7 +141,7 @@ static void virDBusWatchCallback(int fdatch ATTRIBUTE_UNUSED, > > (void)dbus_watch_handle(watch, dbus_flags); > >- while (dbus_connection_dispatch(systembus) == DBUS_DISPATCH_DATA_REMAINS) >+ while (dbus_connection_dispatch(info->bus) == DBUS_DISPATCH_DATA_REMAINS) > /* keep dispatching while data remains */; > } > >@@ -120,18 +161,13 @@ static int virDBusTranslateWatchFlags(int dbus_flags) > } > > >-struct virDBusWatch >-{ >- int watch; >-}; >- > static void virDBusWatchFree(void *data) { > struct virDBusWatch *info = data; > VIR_FREE(info); > } > > static dbus_bool_t virDBusAddWatch(DBusWatch *watch, >- void *data ATTRIBUTE_UNUSED) >+ void *data) > { > int flags = 0; > int fd; >@@ -148,6 +184,7 @@ static dbus_bool_t virDBusAddWatch(DBusWatch *watch, > # else > fd = dbus_watch_get_fd(watch); > # endif >+ info->bus = (DBusConnection *)data; > info->watch = virEventAddHandle(fd, flags, > virDBusWatchCallback, > watch, NULL); >@@ -194,4 +231,11 @@ DBusConnection *virDBusGetSystemBus(void) > return NULL; > } > >+DBusConnection *virDBusGetSessionBus(void) >+{ >+ virReportError(VIR_ERR_INTERNAL_ERROR, >+ "%s", _("DBus support not compiled into this binary")); >+ return NULL; >+} >+ > #endif /* ! HAVE_DBUS */ >diff --git a/src/util/virdbus.h b/src/util/virdbus.h >index 27dca00..e443fbe 100644 >--- a/src/util/virdbus.h >+++ b/src/util/virdbus.h >@@ -30,5 +30,6 @@ > # include "internal.h" > > DBusConnection *virDBusGetSystemBus(void); >+DBusConnection *virDBusGetSessionBus(void); > > #endif /* __VIR_DBUS_H__ */ >-- >1.7.12.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 872254
: 636737 |
636738