提交 9f939df9 编写于 作者: A Anthony Liguori

qemu-char: remove use of QEMUTimer in favor of glib idle function

qemu-char is now independent of the QEMU main loop.
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
Signed-off-by: NAmit Shah <amit.shah@redhat.com>
Message-id: 3cda0bbcfb94912df8a767983a52bb71a4a3231d.1362505276.git.amit.shah@redhat.com
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 8aa33caf
...@@ -71,7 +71,7 @@ struct CharDriverState { ...@@ -71,7 +71,7 @@ struct CharDriverState {
void (*chr_guest_open)(struct CharDriverState *chr); void (*chr_guest_open)(struct CharDriverState *chr);
void (*chr_guest_close)(struct CharDriverState *chr); void (*chr_guest_close)(struct CharDriverState *chr);
void *opaque; void *opaque;
QEMUTimer *open_timer; int idle_tag;
char *label; char *label;
char *filename; char *filename;
int opened; int opened;
......
...@@ -122,20 +122,18 @@ void qemu_chr_be_event(CharDriverState *s, int event) ...@@ -122,20 +122,18 @@ void qemu_chr_be_event(CharDriverState *s, int event)
s->chr_event(s->handler_opaque, event); s->chr_event(s->handler_opaque, event);
} }
static void qemu_chr_fire_open_event(void *opaque) static gboolean qemu_chr_generic_open_bh(gpointer opaque)
{ {
CharDriverState *s = opaque; CharDriverState *s = opaque;
qemu_chr_be_event(s, CHR_EVENT_OPENED); qemu_chr_be_event(s, CHR_EVENT_OPENED);
qemu_free_timer(s->open_timer); s->idle_tag = 0;
s->open_timer = NULL; return FALSE;
} }
void qemu_chr_generic_open(CharDriverState *s) void qemu_chr_generic_open(CharDriverState *s)
{ {
if (s->open_timer == NULL) { if (s->idle_tag == 0) {
s->open_timer = qemu_new_timer_ms(rt_clock, s->idle_tag = g_idle_add(qemu_chr_generic_open_bh, s);
qemu_chr_fire_open_event, s);
qemu_mod_timer(s->open_timer, qemu_get_clock_ms(rt_clock) - 1);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册