This prepares the work for HMP commands to be asynchronous. For now this will and the return synchronously.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- qapi/misc.json | 3 ++- monitor.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/qapi/misc.json b/qapi/misc.json index 5636f4a149..04e704eb6c 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -1307,7 +1307,8 @@ ## { 'command': 'human-monitor-command', 'data': {'command-line': 'str', '*cpu-index': 'int'}, - 'returns': 'str' } + 'returns': 'str', + 'async': true } ## # @ObjectPropertyInfo: diff --git a/monitor.c b/monitor.c index f7826f5626..e11c0abdca 100644 --- a/monitor.c +++ b/monitor.c @@ -637,8 +637,8 @@ static void monitor_data_destroy(Monitor *mon) g_queue_free(mon->qmp.qmp_requests); } -char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index, - int64_t cpu_index, Error **errp) +void qmp_human_monitor_command(const char *command_line, bool has_cpu_index, + int64_t cpu_index, QmpReturn *qret) { char *output = NULL; Monitor *old_mon, hmp; @@ -651,15 +651,15 @@ char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index, if (has_cpu_index) { int ret = monitor_set_cpu(cpu_index); if (ret < 0) { - cur_mon = old_mon; - error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index", + Error *err = NULL; + error_setg(&err, QERR_INVALID_PARAMETER_VALUE, "cpu-index", "a CPU number"); + qmp_return_error(qret, err); goto out; } } handle_hmp_command(&hmp, command_line); - cur_mon = old_mon; qemu_mutex_lock(&hmp.out_lock); if (qstring_get_length(hmp.outbuf) > 0) { @@ -669,9 +669,11 @@ char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index, } qemu_mutex_unlock(&hmp.out_lock); + qmp_human_monitor_command_return(qret, output); + out: monitor_data_destroy(&hmp); - return output; + cur_mon = old_mon; } static int compare_cmd(const char *name, const char *list) -- 2.17.0.rc1.1.g4c4f2b46a3