mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-21 10:52:22 +00:00
virgdbus: Introduce virGDBusHasSessionBus()
This is just like virGDBusHasSystemBus() except it checks for the session bus instead of the system one. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
parent
827a062e3c
commit
0428c69b09
@ -2496,6 +2496,7 @@ virGDBusCloseSystemBus;
|
|||||||
virGDBusErrorIsUnknownMethod;
|
virGDBusErrorIsUnknownMethod;
|
||||||
virGDBusGetSessionBus;
|
virGDBusGetSessionBus;
|
||||||
virGDBusGetSystemBus;
|
virGDBusGetSystemBus;
|
||||||
|
virGDBusHasSessionBus;
|
||||||
virGDBusHasSystemBus;
|
virGDBusHasSystemBus;
|
||||||
virGDBusIsServiceEnabled;
|
virGDBusIsServiceEnabled;
|
||||||
virGDBusIsServiceRegistered;
|
virGDBusIsServiceRegistered;
|
||||||
|
@ -113,8 +113,8 @@ virGDBusSessionBusInit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GDBusConnection *
|
static GDBusConnection *
|
||||||
virGDBusGetSessionBus(void)
|
virGDBusGetSessionBusInternal(void)
|
||||||
{
|
{
|
||||||
if (virOnce(&sessionOnce, virGDBusSessionBusInit) < 0) {
|
if (virOnce(&sessionOnce, virGDBusSessionBusInit) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
@ -122,14 +122,56 @@ virGDBusGetSessionBus(void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sessionBus) {
|
return sessionBus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GDBusConnection *
|
||||||
|
virGDBusGetSessionBus(void)
|
||||||
|
{
|
||||||
|
GDBusConnection *bus = virGDBusGetSessionBusInternal();
|
||||||
|
|
||||||
|
if (!bus) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Unable to get session bus connection: %1$s"),
|
_("Unable to get session bus connection: %1$s"),
|
||||||
sessionError->message);
|
sessionError->message);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sessionBus;
|
return bus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virGDBusHasSessionBus:
|
||||||
|
*
|
||||||
|
* Check if DBus session bus is running. This does not imply that we have
|
||||||
|
* a connection. DBus might be running and refusing connections due to its
|
||||||
|
* client limit. The latter must be treated as a fatal error.
|
||||||
|
*
|
||||||
|
* Return false if dbus is not available, true if probably available.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
virGDBusHasSessionBus(void)
|
||||||
|
{
|
||||||
|
g_autofree char *name = NULL;
|
||||||
|
|
||||||
|
if (virGDBusGetSessionBusInternal())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!g_dbus_error_is_remote_error(sessionError))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
name = g_dbus_error_get_remote_error(sessionError);
|
||||||
|
|
||||||
|
if (name &&
|
||||||
|
(STREQ(name, "org.freedesktop.DBus.Error.FileNotFound") ||
|
||||||
|
STREQ(name, "org.freedesktop.DBus.Error.NoServer"))) {
|
||||||
|
VIR_DEBUG("System bus not available: %s", NULLSTR(sessionError->message));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@ virGDBusGetSystemBus(void);
|
|||||||
GDBusConnection *
|
GDBusConnection *
|
||||||
virGDBusGetSessionBus(void);
|
virGDBusGetSessionBus(void);
|
||||||
|
|
||||||
|
bool
|
||||||
|
virGDBusHasSessionBus(void);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
virGDBusHasSystemBus(void);
|
virGDBusHasSystemBus(void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user