On 06/16/2010 09:22 AM, Jamie Lokier wrote:
Paolo Bonzini wrote:
These should be (at least for now) block-obj-$(CONFIG_POSIX).
+ while (QTAILQ_EMPTY(&(queue->request_list))&&
+ (ret != ETIMEDOUT)) {
+ ret = qemu_cond_timedwait(&(queue->cond),
+ &(queue->lock), 10*100000);
+ }
Using qemu_cond_timedwait is a hack for not properly broadcasting the
condvar in flush_threadlet_queue.
Are you sure? It looks like it also expires idle threads after a
fixed amount of idle time.
Yup, that's the intention of the code.
We signal instead of broadcast because broadcasting causes all threads
to wake up which hurts performance. AFAICT, there is no correctness
issue in using signal vs. broadcast.
Regards,
Anthony Liguori
-- Jamie