Patchwork [3/4] QError: Don't abort on multiple faults

mail settings
Submitter Luiz Capitulino
Date Feb. 8, 2010, 7:01 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/44814/
State New
Headers show


Luiz Capitulino - Feb. 8, 2010, 7:01 p.m.
Ideally, Monitor code should report an error only once and
return the error information up the call chain.

To assure that this happens as expected and that no error is
lost, we have an assert() in qemu_error_internal().

However, we still have not fully converted handlers using
monitor_printf() to report errors. As there can be multiple
monitor_printf() calls on an error, the assertion is easily
triggered when debugging is enabled; and we will get a memory
leak if it's not.

The solution to this problem is to allow multiple faults by only
reporting the first one, and to release the additional error objects.

A better mechanism to report multiple errors to programmers is

Signed-off-by: Luiz Capitulino <>
 monitor.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)


diff --git a/monitor.c b/monitor.c
index cb7eb65..c8b63aa 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4625,8 +4625,13 @@  void qemu_error_internal(const char *file, int linenr, const char *func,
-        assert(qemu_error_sink->mon->error == NULL);
-        qemu_error_sink->mon->error = qerror;
+        /* report only the first error */
+        if (!qemu_error_sink->mon->error) {
+            qemu_error_sink->mon->error = qerror;
+        } else {
+            /* XXX: warn the programmer */
+            QDECREF(qerror);
+        }