[Sorry for the duplicate Alexandre, clicked the wrong button and didn't answer to the mailing list :( ^^]

No, the worker cannot exit at the time when the variable is checked. A worker only can break out of the processing loop, when there is no new item and the condition variable timeout expires. Since the new item was added before the check (while holding the CS), the last worker cannot terminate before this element has been processed and the additional delay of 30sec to wait for new jobs.

Nevertheless I understand that its probably a bit too much "optimized", so I'll submit a new patch later which simplifies this part a bit.

Regards,
Sebastian


2014-03-11 15:09 GMT+01:00 Alexandre Julliard <julliard@winehq.org>:
Sebastian Lackner <sebastian@fds-team.de> writes:

> * Its also on purpose, that num_workers is (read-) accessed at one point
> without locking the critical section. If num_workers > 0 we can be sure, that
> a worker thread will process the work item (sooner or later). If
> num_workers == 0 we enter the critical section, and check once more to
> prevent race condition 2.

The worker may be about to exit at the time you check. I don't think it
makes any sense to add races to "optimize" an error case that's not
going to happen anyway.

--
Alexandre Julliard
julliard@winehq.org