fixed blocking io emulation

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2090 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2006-08-06 09:51:25 +00:00
parent 15e6690aca
commit 6eb5733a3c
3 changed files with 11 additions and 2 deletions

View 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);

6
vl.c
View File

@ -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)

2
vl.h
View File

@ -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;