diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-12-17 20:12:52 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-17 16:08:40 -0800 |
commit | 68e6a4f80d4bea2d281c30fa2bbcd4968b0ccc4e (patch) | |
tree | c544c7a588a48b6d0a310cd46f7114cc99a69ee8 /builtin-pack-objects.c | |
parent | 6fbe42c7ee99b4cafa792b46a16b0158d305fe29 (diff) | |
download | git-68e6a4f80d4bea2d281c30fa2bbcd4968b0ccc4e.tar.gz |
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>
Diffstat (limited to 'builtin-pack-objects.c')
-rw-r--r-- | builtin-pack-objects.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 5765d02f54..e0ce114be7 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -1670,8 +1670,6 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size, p[i].processed = processed; p[i].working = 1; 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 */ 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++) { if (!p[i].list_size) continue; + pthread_mutex_init(&p[i].mutex, NULL); + pthread_cond_init(&p[i].cond, NULL); ret = pthread_create(&p[i].thread, NULL, threaded_find_deltas, &p[i]); if (ret) |