fix monitor
chardev flow control broke monitor, fix it by adding watch support. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
2d62a95766
commit
f628926bb4
23
monitor.c
23
monitor.c
@ -261,11 +261,30 @@ int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond,
|
||||
void *opaque)
|
||||
{
|
||||
monitor_flush(opaque);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void monitor_flush(Monitor *mon)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (mon && mon->outbuf_index != 0 && !mon->mux_out) {
|
||||
qemu_chr_fe_write(mon->chr, mon->outbuf, mon->outbuf_index);
|
||||
mon->outbuf_index = 0;
|
||||
rc = qemu_chr_fe_write(mon->chr, mon->outbuf, mon->outbuf_index);
|
||||
if (rc == mon->outbuf_index) {
|
||||
/* all flushed */
|
||||
mon->outbuf_index = 0;
|
||||
return;
|
||||
}
|
||||
if (rc > 0) {
|
||||
/* partinal write */
|
||||
memmove(mon->outbuf, mon->outbuf + rc, mon->outbuf_index - rc);
|
||||
mon->outbuf_index -= rc;
|
||||
}
|
||||
qemu_chr_fe_add_watch(mon->chr, G_IO_OUT, monitor_unblocked, mon);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user