mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
qmp: fix qmp_capabilities error regression
When someone sends a command before QMP handshake, the error used to be like this: {"execute": "query-cpus"} {"error": {"class": "CommandNotFound", "desc": "Expecting capabilities negotiation with 'qmp_capabilities'"}} While aftercf869d5317
it becomes: {"execute": "query-cpus"} {"error": {"class": "CommandNotFound", "desc": "The command query-cpus has not been found"}} Fix it back to the nicer one. Fixes:cf869d5317
("qmp: support out-of-band (oob) execution", 2018-03-19) Reported-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20180326063901.27425-2-peterx@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> [eblake: commit message grammar tweaks] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
625eaca9e5
commit
9ddb7456c8
1 changed files with 8 additions and 15 deletions
23
monitor.c
23
monitor.c
|
@ -1203,8 +1203,14 @@ static bool qmp_cmd_oob_check(Monitor *mon, QDict *req, Error **errp)
|
||||||
|
|
||||||
cmd = qmp_find_command(mon->qmp.commands, command);
|
cmd = qmp_find_command(mon->qmp.commands, command);
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
if (mon->qmp.commands == &qmp_cap_negotiation_commands) {
|
||||||
"The command %s has not been found", command);
|
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||||
|
"Expecting capabilities negotiation "
|
||||||
|
"with 'qmp_capabilities'");
|
||||||
|
} else {
|
||||||
|
error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
|
||||||
|
"The command %s has not been found", command);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4027,7 +4033,6 @@ static void monitor_qmp_dispatch_one(QMPRequest *req_obj)
|
||||||
{
|
{
|
||||||
Monitor *mon, *old_mon;
|
Monitor *mon, *old_mon;
|
||||||
QObject *req, *rsp = NULL, *id;
|
QObject *req, *rsp = NULL, *id;
|
||||||
QDict *qdict = NULL;
|
|
||||||
bool need_resume;
|
bool need_resume;
|
||||||
|
|
||||||
req = req_obj->req;
|
req = req_obj->req;
|
||||||
|
@ -4050,18 +4055,6 @@ static void monitor_qmp_dispatch_one(QMPRequest *req_obj)
|
||||||
|
|
||||||
cur_mon = old_mon;
|
cur_mon = old_mon;
|
||||||
|
|
||||||
if (mon->qmp.commands == &qmp_cap_negotiation_commands) {
|
|
||||||
qdict = qdict_get_qdict(qobject_to(QDict, rsp), "error");
|
|
||||||
if (qdict
|
|
||||||
&& !g_strcmp0(qdict_get_try_str(qdict, "class"),
|
|
||||||
QapiErrorClass_str(ERROR_CLASS_COMMAND_NOT_FOUND))) {
|
|
||||||
/* Provide a more useful error message */
|
|
||||||
qdict_del(qdict, "desc");
|
|
||||||
qdict_put_str(qdict, "desc", "Expecting capabilities negotiation"
|
|
||||||
" with 'qmp_capabilities'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Respond if necessary */
|
/* Respond if necessary */
|
||||||
monitor_qmp_respond(mon, rsp, NULL, id);
|
monitor_qmp_respond(mon, rsp, NULL, id);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue