]> git.proxmox.com Git - qemu.git/commitdiff
fixed blocking io emulation
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 6 Aug 2006 09:51:25 +0000 (09:51 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 6 Aug 2006 09:51:25 +0000 (09:51 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2090 c046a42c-6fe2-441c-8c8c-71466251a162

block-raw.c
vl.c
vl.h

index 14f4bd5b3cb31f4efa2986dd65fa94d66a7a9581..adb3d39add449ba793346756a27d6488b0c79535 100644 (file)
@@ -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 6daed966b1abd4460c9b29cba48bc62af5a053be..0504c6f199cc80abb1a72f45121fc6a811c8a683 100644 (file)
--- 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 f71742463164acd2f64ef63eb86e6da915d0129b..ce52fb82605941c4e2c471f053374bfab8c71a9d 100644 (file)
--- 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;