diff options
Diffstat (limited to 'monitor/hmp.c')
-rw-r--r-- | monitor/hmp.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/monitor/hmp.c b/monitor/hmp.c index 5cab56d..69c1b7e 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1401,45 +1401,42 @@ static void monitor_read(void *opaque, const uint8_t *buf, int size) static void monitor_event(void *opaque, QEMUChrEvent event) { Monitor *mon = opaque; - MonitorHMP *hmp_mon = container_of(mon, MonitorHMP, common); switch (event) { case CHR_EVENT_MUX_IN: qemu_mutex_lock(&mon->mon_lock); - mon->mux_out = 0; - qemu_mutex_unlock(&mon->mon_lock); - if (mon->reset_seen) { - readline_restart(hmp_mon->rs); + if (mon->mux_out) { + mon->mux_out = 0; monitor_resume(mon); - monitor_flush(mon); - } else { - qatomic_mb_set(&mon->suspend_cnt, 0); } + qemu_mutex_unlock(&mon->mon_lock); break; case CHR_EVENT_MUX_OUT: - if (mon->reset_seen) { - if (qatomic_mb_read(&mon->suspend_cnt) == 0) { - monitor_printf(mon, "\n"); + qemu_mutex_lock(&mon->mon_lock); + if (!mon->mux_out) { + if (mon->reset_seen && !mon->suspend_cnt) { + monitor_puts_locked(mon, "\n"); + } else { + monitor_flush_locked(mon); } - monitor_flush(mon); monitor_suspend(mon); - } else { - qatomic_inc(&mon->suspend_cnt); + mon->mux_out = 1; } - qemu_mutex_lock(&mon->mon_lock); - mon->mux_out = 1; qemu_mutex_unlock(&mon->mon_lock); break; case CHR_EVENT_OPENED: monitor_printf(mon, "QEMU %s monitor - type 'help' for more " "information\n", QEMU_VERSION); + qemu_mutex_lock(&mon->mon_lock); + mon->reset_seen = 1; if (!mon->mux_out) { - readline_restart(hmp_mon->rs); - readline_show_prompt(hmp_mon->rs); + /* Suspend-resume forces the prompt to be printed. */ + monitor_suspend(mon); + monitor_resume(mon); } - mon->reset_seen = 1; + qemu_mutex_unlock(&mon->mon_lock); mon_refcount++; break; |