qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] thread-pool: fix deadlock when callbacks depend


From: Marcin Gibuła
Subject: Re: [Qemu-devel] [PATCH] thread-pool: fix deadlock when callbacks depends on each other
Date: Sun, 01 Jun 2014 21:02:01 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

Good catch!  The main problem with the patch is that you need to use
atomic_inc/atomic_dec to increment and decrement pool->pending_completions.

Ok.

Secondarily, event_notifier_set is pretty heavy-weight, does it work if
you wrap the loop like this?

restart:
     QLIST_FOREACH_SAFE(elem, &pool->head, all, next) {
         ...
     }
     if (pool->pending_completions) {
         goto restart;
     }
     event_notifier_test_and_clear(notifier);
     if (pool->pending_completions) {
         event_notifier_set(notifier);
         goto restart;
     }

I'll test it tomorrow. I assume you want to avoid calling event_notifier_set() until function is reentered via aio_pool?

> Finally, the same bug is also in block/linux-aio.c and
> block/win32-aio.c.

I can try with linux-aio, but my knowledge of windows api is zero...

--
mg



reply via email to

[Prev in Thread] Current Thread [Next in Thread]