fix threaded delta search locking
Found by Jeff King. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
367f4a4343
commit
b81d9af71e
|
@ -1597,6 +1597,7 @@ static void *threaded_find_deltas(void *arg)
|
||||||
data_requester = me;
|
data_requester = me;
|
||||||
pthread_mutex_unlock(&data_provider);
|
pthread_mutex_unlock(&data_provider);
|
||||||
pthread_mutex_lock(&data_ready);
|
pthread_mutex_lock(&data_ready);
|
||||||
|
pthread_mutex_unlock(&data_request);
|
||||||
|
|
||||||
if (!me->list_size)
|
if (!me->list_size)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1609,7 +1610,7 @@ static void *threaded_find_deltas(void *arg)
|
||||||
static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
||||||
int window, int depth, unsigned *processed)
|
int window, int depth, unsigned *processed)
|
||||||
{
|
{
|
||||||
struct thread_params p[delta_search_threads];
|
struct thread_params *target, p[delta_search_threads];
|
||||||
int i, ret;
|
int i, ret;
|
||||||
unsigned chunk_size;
|
unsigned chunk_size;
|
||||||
|
|
||||||
|
@ -1645,17 +1646,17 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
||||||
sublist_size++;
|
sublist_size++;
|
||||||
|
|
||||||
pthread_mutex_lock(&data_provider);
|
pthread_mutex_lock(&data_provider);
|
||||||
data_requester->list = list;
|
target = data_requester;
|
||||||
data_requester->list_size = sublist_size;
|
target->list = list;
|
||||||
|
target->list_size = sublist_size;
|
||||||
pthread_mutex_unlock(&data_ready);
|
pthread_mutex_unlock(&data_ready);
|
||||||
|
|
||||||
list += sublist_size;
|
list += sublist_size;
|
||||||
list_size -= sublist_size;
|
list_size -= sublist_size;
|
||||||
if (!sublist_size) {
|
if (!sublist_size) {
|
||||||
pthread_join(data_requester->thread, NULL);
|
pthread_join(target->thread, NULL);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&data_request);
|
|
||||||
} while (i);
|
} while (i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue