summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--monitor.c80
-rw-r--r--qemu-error.c2
2 files changed, 38 insertions, 44 deletions
diff --git a/monitor.c b/monitor.c
index d8a31242b6..76c909c04d 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3876,13 +3876,6 @@ void monitor_set_error(Monitor *mon, QError *qerror)
     }
 }
 
-static void monitor_print_error(Monitor *mon)
-{
-    qerror_print(mon->error);
-    QDECREF(mon->error);
-    mon->error = NULL;
-}
-
 static int is_async_return(const QObject *data)
 {
     if (data && qobject_type(data) == QTYPE_QDICT) {
@@ -3894,45 +3887,49 @@ static int is_async_return(const QObject *data)
 
 static void handler_audit(Monitor *mon, const mon_cmd_t *cmd, int ret)
 {
-    if (ret && !monitor_has_error(mon)) {
-        /*
-         * If it returns failure, it must have passed on error.
-         *
-         * Action: Report an internal error to the client if in QMP.
-         */
-        if (monitor_ctrl_mode(mon)) {
+    if (monitor_ctrl_mode(mon)) {
+        if (ret && !monitor_has_error(mon)) {
+            /*
+             * If it returns failure, it must have passed on error.
+             *
+             * Action: Report an internal error to the client if in QMP.
+             */
             qerror_report(QERR_UNDEFINED_ERROR);
+            MON_DEBUG("command '%s' returned failure but did not pass an error\n",
+                      cmd->name);
         }
-        MON_DEBUG("command '%s' returned failure but did not pass an error\n",
-                  cmd->name);
-    }
 
 #ifdef CONFIG_DEBUG_MONITOR
-    if (!ret && monitor_has_error(mon)) {
-        /*
-         * If it returns success, it must not have passed an error.
-         *
-         * Action: Report the passed error to the client.
-         */
-        MON_DEBUG("command '%s' returned success but passed an error\n",
-                  cmd->name);
-    }
+        if (!ret && monitor_has_error(mon)) {
+            /*
+             * If it returns success, it must not have passed an error.
+             *
+             * Action: Report the passed error to the client.
+             */
+            MON_DEBUG("command '%s' returned success but passed an error\n",
+                      cmd->name);
+        }
 
-    if (mon_print_count_get(mon) > 0 && strcmp(cmd->name, "info") != 0) {
-        /*
-         * Handlers should not call Monitor print functions.
-         *
-         * Action: Ignore them in QMP.
-         *
-         * (XXX: we don't check any 'info' or 'query' command here
-         * because the user print function _is_ called by do_info(), hence
-         * we will trigger this check. This problem will go away when we
-         * make 'query' commands real and kill do_info())
-         */
-        MON_DEBUG("command '%s' called print functions %d time(s)\n",
-                  cmd->name, mon_print_count_get(mon));
-    }
+        if (mon_print_count_get(mon) > 0 && strcmp(cmd->name, "info") != 0) {
+            /*
+             * Handlers should not call Monitor print functions.
+             *
+             * Action: Ignore them in QMP.
+             *
+             * (XXX: we don't check any 'info' or 'query' command here
+             * because the user print function _is_ called by do_info(), hence
+             * we will trigger this check. This problem will go away when we
+             * make 'query' commands real and kill do_info())
+             */
+            MON_DEBUG("command '%s' called print functions %d time(s)\n",
+                      cmd->name, mon_print_count_get(mon));
+        }
 #endif
+    } else {
+        assert(!monitor_has_error(mon));
+        QDECREF(mon->error);
+        mon->error = NULL;
+    }
 }
 
 static void monitor_call_handler(Monitor *mon, const mon_cmd_t *cmd,
@@ -3985,9 +3982,6 @@ static void handle_user_command(Monitor *mon, const char *cmdline)
         cmd->mhandler.cmd(mon, qdict);
     }
 
-    if (monitor_has_error(mon))
-        monitor_print_error(mon);
-
 out:
     QDECREF(qdict);
 }
diff --git a/qemu-error.c b/qemu-error.c
index 5be6bea4c9..a8c178b332 100644
--- a/qemu-error.c
+++ b/qemu-error.c
@@ -207,7 +207,7 @@ void qerror_report_internal(const char *file, int linenr, const char *func,
     qerror = qerror_from_info(file, linenr, func, fmt, &va);
     va_end(va);
 
-    if (cur_mon) {
+    if (monitor_cur_is_qmp()) {
         monitor_set_error(cur_mon, qerror);
     } else {
         qerror_print(qerror);