diff options
-rw-r--r-- | block-raw.c | 5 | ||||
-rw-r--r-- | vl.c | 6 | ||||
-rw-r--r-- | vl.h | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/block-raw.c b/block-raw.c index 14f4bd5..adb3d39 100644 --- a/block-raw.c +++ b/block-raw.c @@ -308,6 +308,11 @@ void qemu_aio_wait(void) { sigset_t set; int nb_sigs; + +#ifndef QEMU_TOOL + if (qemu_bh_poll()) + return; +#endif sigemptyset(&set); sigaddset(&set, aio_sig_num); sigwait(&set, &nb_sigs); @@ -5200,19 +5200,23 @@ QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque) return bh; } -void qemu_bh_poll(void) +int qemu_bh_poll(void) { QEMUBH *bh, **pbh; + int ret; + ret = 0; for(;;) { pbh = &first_bh; bh = *pbh; if (!bh) break; + ret = 1; *pbh = bh->next; bh->scheduled = 0; bh->cb(bh->opaque); } + return ret; } void qemu_bh_schedule(QEMUBH *bh) @@ -495,7 +495,7 @@ QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque); void qemu_bh_schedule(QEMUBH *bh); void qemu_bh_cancel(QEMUBH *bh); void qemu_bh_delete(QEMUBH *bh); -void qemu_bh_poll(void); +int qemu_bh_poll(void); /* block.c */ typedef struct BlockDriverState BlockDriverState; |