}
+bool
+qemuDBusConnect(virQEMUDriver *driver,
+ virDomainObj *vm)
+{
+ qemuDomainObjPrivate *priv = vm->privateData;
+ g_autoptr(GError) gerr = NULL;
+ g_autofree char *address = NULL;
+
+ if (priv->dbusConnection)
+ return true;
+
+ address = qemuDBusGetAddress(driver, vm);
+ if (!address)
+ return false;
+
+ priv->dbusConnection =
+ g_dbus_connection_new_for_address_sync(address,
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT|
+ G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
+ NULL, NULL, &gerr);
+ if (!priv->dbusConnection) {
+ virReportError(VIR_ERR_OPERATION_FAILED,
+ _("Failed to connect to dbus-daemon: %1$s"), gerr->message);
+ return false;
+ }
+
+ return true;
+}
+
+
static int
qemuDBusWriteConfig(const char *filename, const char *path)
{
} else {
priv->dbusDaemonRunning = false;
}
+
+ g_clear_object(&priv->dbusConnection);
}
if (qemuSecurityDomainSetPathLabel(driver, vm, sockpath, false) < 0)
goto cleanup;
+ if (!qemuDBusConnect(driver, vm))
+ goto cleanup;
+
priv->dbusDaemonRunning = true;
ret = 0;
cleanup:
char *qemuDBusGetAddress(virQEMUDriver *driver,
virDomainObj *vm);
+bool qemuDBusConnect(virQEMUDriver *driver,
+ virDomainObj *vm);
+
int qemuDBusStart(virQEMUDriver *driver,
virDomainObj *vm);
#include "qemu_fd.h"
#include "virchrdev.h"
#include "virobject.h"
+#include "virgdbus.h"
#include "virdomainmomentobjlist.h"
#include "virenum.h"
#include "vireventthread.h"
/* running backup job */
virDomainBackupDef *backup;
+ GDBusConnection *dbusConnection;
bool dbusDaemonRunning;
/* list of Ids to migrate */
if (qemuDomainObjStartWorker(obj) < 0)
goto error;
+ if (priv->dbusDaemonRunning && !qemuDBusConnect(driver, obj))
+ goto error;
+
VIR_DEBUG("Reconnect monitor to def=%p name='%s'", obj, obj->def->name);
tryMonReconn = true;