diff mbox series

[v3,36/38] monitor: start making qmp_human_monitor_command() asynchronous

Message ID 20180326150916.9602-37-marcandre.lureau@redhat.com
State New
Headers show
Series RFC: monitor: add asynchronous command type | expand

Commit Message

Marc-André Lureau March 26, 2018, 3:09 p.m. UTC
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.lureau@redhat.com>
---
 qapi/misc.json |  3 ++-
 monitor.c      | 14 ++++++++------
 2 files changed, 10 insertions(+), 7 deletions(-)
diff mbox series

Patch

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)