From 6eb5733a3cad93b00043d48fa22b9df7d1f5ab33 Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 6 Aug 2006 09:51:25 +0000 Subject: [PATCH] fixed blocking io emulation git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2090 c046a42c-6fe2-441c-8c8c-71466251a162 --- block-raw.c | 5 +++++ vl.c | 6 +++++- vl.h | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/block-raw.c b/block-raw.c index 14f4bd5b3c..adb3d39add 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); diff --git a/vl.c b/vl.c index 6daed966b1..0504c6f199 100644 --- a/vl.c +++ b/vl.c @@ -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) diff --git a/vl.h b/vl.h index f717424631..ce52fb8260 100644 --- a/vl.h +++ b/vl.h @@ -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;