summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2014-06-01 13:07:21 +0200
committerJunio C Hamano <gitster@pobox.com>2014-06-02 13:51:22 -0700
commitfb79947487b628ec82bc0ad46a08629539a59091 (patch)
tree724023ca801aff9dea72ea6f4777c1d6767f5be8
parentbce14aa132e0064d9a9b1c7ad98e71e22c6e0272 (diff)
downloadgit-rs/pack-objects-no-unnecessary-realloc.tar.gz
pack-objects: use free()+xcalloc() instead of xrealloc()+memset()rs/pack-objects-no-unnecessary-realloc
Whenever the hash table becomes too small then its size is increased, the original part (and the added space) is zerod out using memset(), and the table is rebuilt from scratch. Simplify this proceess by returning the old memory using free() and allocating the new buffer using xcalloc(), which already clears the buffer for us. That way we avoid copying the old hash table contents needlessly inside xrealloc(). While at it, use the first array member with sizeof instead of a specific type. The old code used uint32_t and int, while index is actually an array of int32_t. Their sizes are the same basically everywhere, so it's not actually a problem, but the new code is cleaner and doesn't have to be touched should the type be changed. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--pack-objects.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/pack-objects.c b/pack-objects.c
index d01d851ce9..4f36c32045 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -47,8 +47,8 @@ static void rehash_objects(struct packing_data *pdata)
if (pdata->index_size < 1024)
pdata->index_size = 1024;
- pdata->index = xrealloc(pdata->index, sizeof(uint32_t) * pdata->index_size);
- memset(pdata->index, 0, sizeof(int) * pdata->index_size);
+ free(pdata->index);
+ pdata->index = xcalloc(pdata->index_size, sizeof(*pdata->index));
entry = pdata->objects;