mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
QMP: Fix error reporting in the async API
The current asynchronous command API doesn't return a QMP response when the async command fails. This is easy to reproduce with the balloon command (the sole async command we have so far): run qemu w/o the '-balloon virtio' option and try to issue the balloon command via QMP: no response will be sent to the client. This commit fixes the problem by making qmp_async_cmd_handler() return the handler's error code and then calling monitor_protocol_emitter() if the handler has returned an error. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
410cbafebc
commit
5af7bbae0c
1 changed files with 8 additions and 4 deletions
12
monitor.c
12
monitor.c
|
@ -546,10 +546,10 @@ static void qmp_monitor_complete(void *opaque, QObject *ret_data)
|
|||
monitor_protocol_emitter(opaque, ret_data);
|
||||
}
|
||||
|
||||
static void qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
|
||||
const QDict *params)
|
||||
static int qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
|
||||
const QDict *params)
|
||||
{
|
||||
cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
|
||||
return cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
|
||||
}
|
||||
|
||||
static void qmp_async_info_handler(Monitor *mon, const mon_cmd_t *cmd)
|
||||
|
@ -4239,7 +4239,11 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
|
|||
}
|
||||
|
||||
if (monitor_handler_is_async(cmd)) {
|
||||
qmp_async_cmd_handler(mon, cmd, args);
|
||||
err = qmp_async_cmd_handler(mon, cmd, args);
|
||||
if (err) {
|
||||
/* emit the error response */
|
||||
goto err_out;
|
||||
}
|
||||
} else {
|
||||
monitor_call_handler(mon, cmd, args);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue