From cc19d3eeef59cbd354c1c618f7421d6fe5e0a098 Mon Sep 17 00:00:00 2001 From: Ot ten Thije Date: Mon, 19 Jul 2010 13:10:18 +0100 Subject: Fixed infinite loop in qemu_aio_wait() affecting savevm. Solved by porting a check on AIO operations from QEMU mainline (in mainline commit a76bab4952a1539266490295fb50b78802c467c2). Change-Id: I1d2011776f7cb90d81e36a5cf9381ef956d9a5b9 --- aio-android.c | 5 +++++ iolooper-select.c | 6 ++++++ iolooper.h | 2 ++ 3 files changed, 13 insertions(+) diff --git a/aio-android.c b/aio-android.c index 53f7a6d..2b67579 100644 --- a/aio-android.c +++ b/aio-android.c @@ -151,6 +151,11 @@ void qemu_aio_wait(void) walking_handlers = 0; + /* No AIO operations? Get us out of here */ + if (!iolooper_has_operations(looper)) { + break; + } + /* wait until next event */ ret = iolooper_wait(looper, -1); diff --git a/iolooper-select.c b/iolooper-select.c index 74a5a3a..bf7ae8f 100644 --- a/iolooper-select.c +++ b/iolooper-select.c @@ -174,3 +174,9 @@ iolooper_is_write( IoLooper* iol, int fd ) { return FD_ISSET(fd, iol->writes_result); } + +int +iolooper_has_operations( IoLooper* iol ) +{ + return iolooper_fd_count(iol) > 0; +} diff --git a/iolooper.h b/iolooper.h index ead3583..2822f71 100644 --- a/iolooper.h +++ b/iolooper.h @@ -21,5 +21,7 @@ int iolooper_wait( IoLooper* iol, int64_t duration ); int iolooper_is_read( IoLooper* iol, int fd ); int iolooper_is_write( IoLooper* iol, int fd ); +/* Returns 1 if this IoLooper has one or more file descriptor to interact with */ +int iolooper_has_operations( IoLooper* iol ); #endif /* IOLOOPER_H */ -- cgit v1.1