monitor: Catch printing to non-existent monitor

The monitor_vprintf() function now touches the 'mon' pointer
before calling monitor_puts(), this causes block migration
to segfault as its functions call monitor_printf() with a
NULL 'mon'.

To fix the problem this commit moves the 'mon' NULL check
from monitor_puts() to monitor_vprintf().

This can potentially hide bugs, but for some reason this has
been the behavior for a long time.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Luiz Capitulino 2009-12-14 18:53:24 -02:00 committed by Anthony Liguori
parent 183e6e5257
commit 2daa119126

View File

@ -177,9 +177,6 @@ static void monitor_puts(Monitor *mon, const char *str)
{ {
char c; char c;
if (!mon)
return;
for(;;) { for(;;) {
c = *str++; c = *str++;
if (c == '\0') if (c == '\0')
@ -195,6 +192,9 @@ static void monitor_puts(Monitor *mon, const char *str)
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap) void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
{ {
if (!mon)
return;
if (mon->mc && !mon->mc->print_enabled) { if (mon->mc && !mon->mc->print_enabled) {
qemu_error_new(QERR_UNDEFINED_ERROR); qemu_error_new(QERR_UNDEFINED_ERROR);
} else { } else {