mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
Plug a resource leak in threaded pack-objects code.
A mutex and a condition variable is allocated for each thread and torn down when the thread terminates. However, for certain workloads it can happen that some threads are actually not started at all. In this case we would leak the mutex and condition variable. Now we allocate them only for those threads that are actually started. Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6fbe42c7ee
commit
68e6a4f80d
@ -1670,8 +1670,6 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
|||||||
p[i].processed = processed;
|
p[i].processed = processed;
|
||||||
p[i].working = 1;
|
p[i].working = 1;
|
||||||
p[i].data_ready = 0;
|
p[i].data_ready = 0;
|
||||||
pthread_mutex_init(&p[i].mutex, NULL);
|
|
||||||
pthread_cond_init(&p[i].cond, NULL);
|
|
||||||
|
|
||||||
/* try to split chunks on "path" boundaries */
|
/* try to split chunks on "path" boundaries */
|
||||||
while (sub_size < list_size && list[sub_size]->hash &&
|
while (sub_size < list_size && list[sub_size]->hash &&
|
||||||
@ -1690,6 +1688,8 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
|||||||
for (i = 0; i < delta_search_threads; i++) {
|
for (i = 0; i < delta_search_threads; i++) {
|
||||||
if (!p[i].list_size)
|
if (!p[i].list_size)
|
||||||
continue;
|
continue;
|
||||||
|
pthread_mutex_init(&p[i].mutex, NULL);
|
||||||
|
pthread_cond_init(&p[i].cond, NULL);
|
||||||
ret = pthread_create(&p[i].thread, NULL,
|
ret = pthread_create(&p[i].thread, NULL,
|
||||||
threaded_find_deltas, &p[i]);
|
threaded_find_deltas, &p[i]);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
Reference in New Issue
Block a user