Code

pack-objects: don't use too many threads with few objects
authorNicolas Pitre <nico@cam.org>
Sat, 13 Dec 2008 20:06:40 +0000 (15:06 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 14 Dec 2008 02:55:55 +0000 (18:55 -0800)
If there are few objects to deltify, they might be split amongst threads
so that there is simply no other objects left to delta against within
the same thread.  Let's use the same 2*window treshold as used for the
final load balancing to allow extra threads to be created.

This fixes the benign t5300 test failure.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Tested-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-pack-objects.c

index 619e597d5ca45c804e9a452fb007cceae2ca6df3..e8515348be397fdf1d8201c5d957f2a5f2dbb334 100644 (file)
@@ -1620,6 +1620,10 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
        for (i = 0; i < delta_search_threads; i++) {
                unsigned sub_size = list_size / (delta_search_threads - i);
 
+               /* don't use too small segments or no deltas will be found */
+               if (sub_size < 2*window && i+1 < delta_search_threads)
+                       sub_size = 0;
+
                p[i].window = window;
                p[i].depth = depth;
                p[i].processed = processed;