summaryrefslogtreecommitdiff
path: root/monitor.c
diff options
context:
space:
mode:
authorLuiz Capitulino <lcapitulino@redhat.com>2009-11-26 22:59:05 -0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-12-03 09:41:24 -0600
commit4a29a85db9e67fcd07e6ca55d69e369e9874ec95 (patch)
tree3c60997fb70e0aa86a3bc20bd93616273d00caf5 /monitor.c
parentb1a15e7eaafba8f26e2263b1a9b6e6d40e585e72 (diff)
downloadqemu-4a29a85db9e67fcd07e6ca55d69e369e9874ec95.tar.gz
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>
Diffstat (limited to 'monitor.c')
-rw-r--r--monitor.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/monitor.c b/monitor.c
index cd2f19c19a..af6d3d5d22 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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);
}