diff options
-rw-r--r-- | delta.h | 2 | ||||
-rw-r--r-- | pack-objects.c | 15 |
2 files changed, 10 insertions, 7 deletions
@@ -18,6 +18,8 @@ create_delta_index(const void *buf, unsigned long bufsize); /* * free_delta_index: free the index created by create_delta_index() + * + * Given pointer must be what create_delta_index() returned, or NULL. */ extern void free_delta_index(struct delta_index *index); diff --git a/pack-objects.c b/pack-objects.c index 526c090c61..b430b02cf7 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -1105,17 +1105,14 @@ static void find_deltas(struct object_entry **list, int window, int depth) if (entry->size < 50) continue; - if (n->index) - free_delta_index(n->index); + free_delta_index(n->index); + n->index = NULL; free(n->data); n->entry = entry; n->data = read_sha1_file(entry->sha1, type, &size); if (size != entry->size) die("object %s inconsistent object length (%lu vs %lu)", sha1_to_hex(entry->sha1), size, entry->size); - n->index = create_delta_index(n->data, size); - if (!n->index) - die("out of memory"); j = window; while (--j > 0) { @@ -1135,6 +1132,11 @@ static void find_deltas(struct object_entry **list, int window, int depth) */ if (entry->delta && depth <= entry->depth) continue; + + n->index = create_delta_index(n->data, size); + if (!n->index) + die("out of memory"); + idx++; if (idx >= window) idx = 0; @@ -1144,8 +1146,7 @@ static void find_deltas(struct object_entry **list, int window, int depth) fputc('\n', stderr); for (i = 0; i < window; ++i) { - if (array[i].index) - free_delta_index(array[i].index); + free_delta_index(array[i].index); free(array[i].data); } free(array); |