diff options
author | Luiz Capitulino <lcapitulino@redhat.com> | 2009-11-26 22:59:05 -0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-12-03 09:41:24 -0600 |
commit | 4a29a85db9e67fcd07e6ca55d69e369e9874ec95 (patch) | |
tree | 3c60997fb70e0aa86a3bc20bd93616273d00caf5 | |
parent | b1a15e7eaafba8f26e2263b1a9b6e6d40e585e72 (diff) |
QMP: Disable monitor print functions
We still have handlers which will call monitor print functions
in several places. Usually to report errors.
If they do this when we are in control mode, we will be emitting
garbage to our clients.
To avoid this problem, this commit adds a way to disable those
functions. If any of them is called when in control mode, we will
emit a generic error.
Although this is far from the perfect solution, it guarantees
that only JSON is sent to Clients.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | monitor.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -98,6 +98,7 @@ struct mon_fd_t { typedef struct MonitorControl { QObject *id; + int print_enabled; JSONMessageParser parser; } MonitorControl; @@ -186,9 +187,13 @@ static void monitor_puts(Monitor *mon, const char *str) void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap) { - char buf[4096]; - vsnprintf(buf, sizeof(buf), fmt, ap); - monitor_puts(mon, buf); + if (mon->mc && !mon->mc->print_enabled) { + qemu_error_new(QERR_UNDEFINED_ERROR); + } else { + char buf[4096]; + vsnprintf(buf, sizeof(buf), fmt, ap); + monitor_puts(mon, buf); + } } void monitor_printf(Monitor *mon, const char *fmt, ...) @@ -272,7 +277,10 @@ static void monitor_json_emitter(Monitor *mon, const QObject *data) json = qobject_to_json(data); assert(json != NULL); + mon->mc->print_enabled = 1; monitor_printf(mon, "%s\n", qstring_get_str(json)); + mon->mc->print_enabled = 0; + QDECREF(json); } |