threaded pack-objects: Use condition variables for thread communication.
authorJohannes Sixt <johannes.sixt@telecom.at>
Sun, 16 Dec 2007 19:45:34 +0000 (20:45 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Dec 2007 03:26:12 +0000 (19:26 -0800)
commit50f22ada523f448986dd6273da14a477cea5a646
treeb4fbc54cfcedf89407dffd16602399348e77045f
parent3eb2a15eb385749fbfe59b4e37fc754416275760
threaded pack-objects: Use condition variables for thread communication.

In the threaded pack-objects code the main thread and the worker threads
must mutually signal that they have assigned a new pack of work or have
completed their work, respectively. Previously, the code used mutexes that
were locked in one thread and unlocked from a different thread, which is
bogus (and happens to work on Linux).

Here we rectify the implementation by using condition variables: There is
one condition variable on which the main thread waits until a thread
requests new work; and each worker thread has its own condition variable
on which it waits until it is assigned new work or signaled to terminate.

As a cleanup, the worker threads are spawned only after the initial work
packages have been assigned.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-pack-objects.c