Commit 9f939df9 authored by Anthony Liguori's avatar Anthony Liguori
Browse files

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: default avatarAnthony Liguori <aliguori@us.ibm.com>
Signed-off-by: default avatarAmit Shah <amit.shah@redhat.com>
Message-id: 3cda0bbcfb94912df8a767983a52bb71a4a3231d.1362505276.git.amit.shah@redhat.com
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 8aa33caf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ struct CharDriverState {
    void (*chr_guest_open)(struct CharDriverState *chr);
    void (*chr_guest_close)(struct CharDriverState *chr);
    void *opaque;
    QEMUTimer *open_timer;
    int idle_tag;
    char *label;
    char *filename;
    int opened;
+5 −7
Original line number Diff line number Diff line
@@ -122,20 +122,18 @@ void qemu_chr_be_event(CharDriverState *s, int 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;
    qemu_chr_be_event(s, CHR_EVENT_OPENED);
    qemu_free_timer(s->open_timer);
    s->open_timer = NULL;
    s->idle_tag = 0;
    return FALSE;
}

void qemu_chr_generic_open(CharDriverState *s)
{
    if (s->open_timer == NULL) {
        s->open_timer = qemu_new_timer_ms(rt_clock,
                                          qemu_chr_fire_open_event, s);
        qemu_mod_timer(s->open_timer, qemu_get_clock_ms(rt_clock) - 1);
    if (s->idle_tag == 0) {
        s->idle_tag = g_idle_add(qemu_chr_generic_open_bh, s);
    }
}