g_autoptr(virJSONValue) props = NULL;
qemuDomainObjPrivatePtr priv = QEMU_DOMAIN_PRIVATE(vm);
- if (virStringListLength((const char **)priv->dbusVMStateIds) == 0)
+ if (!priv->dbusVMStateIds)
return 0;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
}
-int
+void
qemuDBusVMStateAdd(virDomainObjPtr vm, const char *id)
{
- return virStringListAdd(&QEMU_DOMAIN_PRIVATE(vm)->dbusVMStateIds, id);
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+
+ priv->dbusVMStateIds = g_slist_append(priv->dbusVMStateIds, g_strdup(id));
}
void
qemuDBusVMStateRemove(virDomainObjPtr vm, const char *id)
{
- virStringListRemove(&QEMU_DOMAIN_PRIVATE(vm)->dbusVMStateIds, id);
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ GSList *next;
+
+ for (next = priv->dbusVMStateIds; next; next = next->next) {
+ const char *elem = next->data;
+
+ if (STREQ(id, elem)) {
+ priv->dbusVMStateIds = g_slist_remove_link(priv->dbusVMStateIds, next);
+ g_slist_free_full(next, g_free);
+ break;
+ }
+ }
}
void qemuDBusStop(virQEMUDriverPtr driver,
virDomainObjPtr vm);
-int qemuDBusVMStateAdd(virDomainObjPtr vm, const char *id);
+void qemuDBusVMStateAdd(virDomainObjPtr vm, const char *id);
void qemuDBusVMStateRemove(virDomainObjPtr vm, const char *id);
priv->dbusDaemonRunning = false;
- g_strfreev(priv->dbusVMStateIds);
- priv->dbusVMStateIds = NULL;
+ if (priv->dbusVMStateIds)
+ g_slist_free_full(g_steal_pointer(&priv->dbusVMStateIds), g_free);
priv->dbusVMState = false;
bool dbusDaemonRunning;
/* list of Ids to migrate */
- char **dbusVMStateIds;
+ GSList *dbusVMStateIds;
/* true if -object dbus-vmstate was added */
bool dbusVMState;
}
}
- if (virStringListLength((const char **)priv->dbusVMStateIds) > 0 &&
+ if (priv->dbusVMStateIds &&
!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("cannot migrate this domain without dbus-vmstate support"));
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1;
- rv = qemuMonitorSetDBusVMStateIdList(priv->mon,
- (const char **)priv->dbusVMStateIds);
+ rv = qemuMonitorSetDBusVMStateIdList(priv->mon, priv->dbusVMStateIds);
if (rv < 0)
goto exit_monitor;
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- if (virStringListLength((const char **)priv->dbusVMStateIds) > 0) {
+ if (priv->dbusVMStateIds) {
int rv;
if (qemuHotplugAttachDBusVMState(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
return -1;
- rv = qemuMonitorSetDBusVMStateIdList(priv->mon,
- (const char **)priv->dbusVMStateIds);
+ rv = qemuMonitorSetDBusVMStateIdList(priv->mon, priv->dbusVMStateIds);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
rv = -1;
int
qemuMonitorSetDBusVMStateIdList(qemuMonitorPtr mon,
- const char **list)
+ GSList *list)
{
g_autofree char *path = NULL;
+ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+ GSList *next;
VIR_DEBUG("list=%p", list);
- if (virStringListLength(list) == 0)
+ QEMU_CHECK_MONITOR(mon);
+
+ if (!list)
return 0;
- path = g_strdup_printf("/objects/%s",
- qemuDomainGetDBusVMStateAlias());
+ for (next = list; next; next = next->next)
+ virBufferAsprintf(&buf, "%s,", (const char *) next->data);
- QEMU_CHECK_MONITOR(mon);
+ virBufferTrim(&buf, ",");
+
+ path = g_strdup_printf("/objects/%s", qemuDomainGetDBusVMStateAlias());
- return qemuMonitorJSONSetDBusVMStateIdList(mon, path, list);
+ return qemuMonitorJSONSetDBusVMStateIdList(mon, path,
+ virBufferCurrentContent(&buf));
}
const char *path);
int qemuMonitorSetDBusVMStateIdList(qemuMonitorPtr mon,
- const char **list);
+ GSList *list);
int qemuMonitorSetMigrationSpeed(qemuMonitorPtr mon,
unsigned long bandwidth);
int
qemuMonitorJSONSetDBusVMStateIdList(qemuMonitorPtr mon,
const char *vmstatepath,
- const char **list)
+ const char *idstr)
{
- g_autofree char *str = virStringListJoin(list, ",");
qemuMonitorJSONObjectProperty prop = {
.type = QEMU_MONITOR_OBJECT_PROPERTY_STRING,
- .val.str = str,
+ .val.str = (char *) idstr,
};
return qemuMonitorJSONSetObjectProperty(mon, vmstatepath, "id-list", &prop);
int qemuMonitorJSONSetDBusVMStateIdList(qemuMonitorPtr mon,
const char *vmstatepath,
- const char **list)
+ const char *idstr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int
virCommandAddArgFormat(cmd, "--dbus-address=%s", dbus_addr);
if (qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_MIGRATE)) {
- if (qemuDBusVMStateAdd(vm, id) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Failed to register slirp migration"));
- goto error;
- }
+ qemuDBusVMStateAdd(vm, id);
+
if (incoming)
virCommandAddArg(cmd, "--dbus-incoming");
}