From: aliguori Date: Mon, 6 Oct 2008 13:52:44 +0000 (+0000) Subject: Allow the monitor to be suspended during non-blocking op X-Git-Tag: release_0_10_0~1255 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=d8f4460989d6d6749ff649f1c5439de38c2dfeab;p=qemu.git Allow the monitor to be suspended during non-blocking op Live migration happens in the background, but it is useful to make the monitor command appear as if it's blocking. This allows a management tool to immediately know when the live migration has completed without having to poll the migration status. This patch allows the monitor to be suspended from a monitor callback which will prevent new monitor commands from being executed. Signed-off-by: Anthony Liguori git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5431 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/console.h b/console.h index dd8b0397e..fba9e299b 100644 --- a/console.h +++ b/console.h @@ -175,6 +175,8 @@ void term_flush(void); void term_print_help(void); void monitor_readline(const char *prompt, int is_password, char *buf, int buf_size); +void monitor_suspend(void); +void monitor_resume(void); /* readline.c */ typedef void ReadLineFunc(void *opaque, const char *str); diff --git a/monitor.c b/monitor.c index 4f51eccdc..dd2e770e6 100644 --- a/monitor.c +++ b/monitor.c @@ -2694,10 +2694,27 @@ static void term_read(void *opaque, const uint8_t *buf, int size) readline_handle_byte(buf[i]); } +static int monitor_suspended; + static void monitor_handle_command1(void *opaque, const char *cmdline) { monitor_handle_command(cmdline); - monitor_start_input(); + if (!monitor_suspended) + monitor_start_input(); + else + monitor_suspended = 2; +} + +void monitor_suspend(void) +{ + monitor_suspended = 1; +} + +void monitor_resume(void) +{ + if (monitor_suspended == 2) + monitor_start_input(); + monitor_suspended = 0; } static void monitor_start_input(void)