From 30525aff78e9ee2099b24a3dc7534317ee130383 Mon Sep 17 00:00:00 2001 From: malc Date: Sat, 21 Feb 2009 05:48:13 +0000 Subject: Avoid infinite loop around timed condition variable This can happen due to spurious wakeups git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6631 c046a42c-6fe2-441c-8c8c-71466251a162 --- posix-aio-compat.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'posix-aio-compat.c') diff --git a/posix-aio-compat.c b/posix-aio-compat.c index 154b051..aa1b6f5 100644 --- a/posix-aio-compat.c +++ b/posix-aio-compat.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -86,16 +86,17 @@ static void *aio_thread(void *unused) struct qemu_paiocb *aiocb; size_t offset; int ret = 0; + qemu_timeval tv; + struct timespec ts; + + qemu_gettimeofday(&tv); + ts.tv_sec = tv.tv_sec + 10; + ts.tv_nsec = 0; mutex_lock(&lock); while (TAILQ_EMPTY(&request_list) && !(ret == ETIMEDOUT)) { - struct timespec ts = { 0 }; - qemu_timeval tv; - - qemu_gettimeofday(&tv); - ts.tv_sec = tv.tv_sec + 10; ret = cond_timedwait(&cond, &lock, &ts); } -- cgit v1.1