提交 b2149389 编写于 作者: P Peter Krempa 提交者: Martin Kletzander

qemu: Properly report guest agent errors on command passthrough

The code for arbitrary guest agent passthrough was horribly broken since
introduction. Fix it to correctly report errors.

(cherry picked from commit 6e5b36d5)
上级 4cbba884
......@@ -1403,25 +1403,32 @@ qemuAgentArbitraryCommand(qemuAgentPtr mon,
int timeout)
{
int ret = -1;
virJSONValuePtr cmd;
virJSONValuePtr cmd = NULL;
virJSONValuePtr reply = NULL;
*result = NULL;
if (timeout < VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN)
return ret;
if (timeout < VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN) {
virReportError(VIR_ERR_INVALID_ARG,
_("guest agent timeout '%d' is "
"less than the minimum '%d'"),
timeout, VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN);
goto cleanup;
}
cmd = virJSONValueFromString(cmd_str);
if (!cmd)
return ret;
if (!(cmd = virJSONValueFromString(cmd_str)))
goto cleanup;
if ((ret = qemuAgentCommand(mon, cmd, &reply, timeout)) < 0)
goto cleanup;
ret = qemuAgentCommand(mon, cmd, &reply, timeout);
if ((ret = qemuAgentCheckError(cmd, reply)) < 0)
goto cleanup;
if (ret == 0) {
ret = qemuAgentCheckError(cmd, reply);
if (!(*result = virJSONValueToString(reply, false)))
ret = -1;
}
if (!(*result = virJSONValueToString(reply, false)))
ret = -1;
cleanup:
virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
......
......@@ -14900,16 +14900,12 @@ qemuDomainAgentCommand(virDomainPtr domain,
qemuDomainObjEnterAgent(vm);
ret = qemuAgentArbitraryCommand(priv->agent, cmd, &result, timeout);
qemuDomainObjExitAgent(vm);
if (ret < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Failed to execute agent command"));
goto endjob;
}
if (ret < 0)
VIR_FREE(result);
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0) {
if (qemuDomainObjEndJob(driver, vm) == 0)
vm = NULL;
}
cleanup:
if (vm)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册