Revision 9f939df9 qemu-char.c

b/qemu-char.c
122 122
    s->chr_event(s->handler_opaque, event);
123 123
}
124 124

  
125
static void qemu_chr_fire_open_event(void *opaque)
125
static gboolean qemu_chr_generic_open_bh(gpointer opaque)
126 126
{
127 127
    CharDriverState *s = opaque;
128 128
    qemu_chr_be_event(s, CHR_EVENT_OPENED);
129
    qemu_free_timer(s->open_timer);
130
    s->open_timer = NULL;
129
    s->idle_tag = 0;
130
    return FALSE;
131 131
}
132 132

  
133 133
void qemu_chr_generic_open(CharDriverState *s)
134 134
{
135
    if (s->open_timer == NULL) {
136
        s->open_timer = qemu_new_timer_ms(rt_clock,
137
                                          qemu_chr_fire_open_event, s);
138
        qemu_mod_timer(s->open_timer, qemu_get_clock_ms(rt_clock) - 1);
135
    if (s->idle_tag == 0) {
136
        s->idle_tag = g_idle_add(qemu_chr_generic_open_bh, s);
139 137
    }
140 138
}
141 139

  

Also available in: Unified diff