Revision 533a8cf3

b/async.c
150 150
{
151 151
    AioContext *ctx = (AioContext *) source;
152 152
    QEMUBH *bh;
153
    int deadline;
153 154

  
155
    /* We assume there is no timeout already supplied */
156
    *timeout = -1;
154 157
    for (bh = ctx->first_bh; bh; bh = bh->next) {
155 158
        if (!bh->deleted && bh->scheduled) {
156 159
            if (bh->idle) {
......
166 169
        }
167 170
    }
168 171

  
172
    deadline = qemu_timeout_ns_to_ms(timerlistgroup_deadline_ns(&ctx->tlg));
173
    if (deadline == 0) {
174
        *timeout = 0;
175
        return true;
176
    } else {
177
        *timeout = qemu_soonest_timeout(*timeout, deadline);
178
    }
179

  
169 180
    return false;
170 181
}
171 182

  
......
180 191
            return true;
181 192
	}
182 193
    }
183
    return aio_pending(ctx);
194
    return aio_pending(ctx) || (timerlistgroup_deadline_ns(&ctx->tlg) == 0);
184 195
}
185 196

  
186 197
static gboolean

Also available in: Unified diff