qemuBuildPRManagerInfoProps(const virDomainDiskDef *disk,
virJSONValuePtr *propsret)
{
- int ret = -1;
-
- *propsret = NULL;
-
- if (virJSONValueObjectCreate(propsret,
- "s:path", disk->src->pr->path,
- NULL) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- return ret;
+ return qemuMonitorCreateObjectProps(propsret,
+ "pr-manager-helper",
+ disk->src->pr->mgralias,
+ "s:path", disk->src->pr->path,
+ NULL);
}
qemuBuildMasterPRCommandLine(virCommandPtr cmd,
const virDomainDef *def)
{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
size_t i;
bool managedAdded = false;
virJSONValuePtr props = NULL;
- char *tmp = NULL;
int ret = -1;
for (i = 0; i < def->ndisks; i++) {
if (qemuBuildPRManagerInfoProps(disk, &props) < 0)
goto cleanup;
- if (!(tmp = virQEMUBuildObjectCommandlineFromJSONType("pr-manager-helper",
- disk->src->pr->mgralias,
- props)))
+ if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0)
goto cleanup;
- virJSONValueFree(props);
- props = NULL;
- virCommandAddArgList(cmd, "-object", tmp, NULL);
- VIR_FREE(tmp);
+ virCommandAddArg(cmd, "-object");
+ virCommandAddArgBuffer(cmd, &buf);
}
ret = 0;
cleanup:
+ virBufferFreeAndReset(&buf);
virJSONValueFree(props);
return ret;
}
char *devstr = NULL;
char *drivestr = NULL;
char *drivealias = NULL;
+ char *prmgrAlias = NULL;
bool driveAdded = false;
bool secobjAdded = false;
bool encobjAdded = false;
- bool prmgrAdded = false;
bool prdStarted = false;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virJSONValuePtr secobjProps = NULL;
encobjAdded = true;
}
- if (prmgrProps) {
- rv = qemuMonitorAddObjectType(priv->mon, "pr-manager-helper",
- disk->src->pr->mgralias,
- prmgrProps);
- prmgrProps = NULL; /* qemuMonitorAddObjectType consumes */
- if (rv < 0)
- goto exit_monitor;
- prmgrAdded = true;
- }
+ if (prmgrProps &&
+ qemuMonitorAddObject(priv->mon, &prmgrProps, &prmgrAlias) < 0)
+ goto exit_monitor;
if (qemuMonitorAddDrive(priv->mon, drivestr) < 0)
goto exit_monitor;
virJSONValueFree(encobjProps);
virJSONValueFree(secobjProps);
qemuDomainSecretDiskDestroy(disk);
+ VIR_FREE(prmgrAlias);
VIR_FREE(drivealias);
VIR_FREE(drivestr);
VIR_FREE(devstr);
ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias));
if (encobjAdded)
ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias));
- if (prmgrAdded)
- ignore_value(qemuMonitorDelObject(priv->mon, disk->src->pr->mgralias));
+ if (prmgrAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias));
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -2;
virErrorRestore(&orig_err);