summaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>2013-06-09 17:39:18 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-06-10 00:03:01 (GMT)
commita0fc4db01dfa69d836dc6f24218974a674ec29ac (patch)
tree59d85babf3b4aea2ccc0f9f9816bf1ef4505f23f /read-cache.c
parent1ecb5ff141f6e54727c746446b52af51016e662c (diff)
downloadgit-a0fc4db01dfa69d836dc6f24218974a674ec29ac.zip
git-a0fc4db01dfa69d836dc6f24218974a674ec29ac.tar.gz
git-a0fc4db01dfa69d836dc6f24218974a674ec29ac.tar.bz2
read-cache: free cache in discard_index
discard_cache doesn't have to free the array of cache entries, because the next call of read_cache can simply reuse it, as they all operate on the global variable the_index. discard_index on the other hand does have to free it, because it can be used e.g. with index_state variables on the stack, in which case a missing free would cause an unrecoverable leak. This patch releases the memory and removes a comment that was relevant for discard_cache but has become outdated. Since discard_cache is just a wrapper around discard_index nowadays, we lose the optimization that avoids reallocation of that array within loops of read_cache and discard_cache. That doesn't cause a performance regression for me, however (HEAD = this patch, HEAD^ = master + p0002): Test // HEAD^ HEAD ---------------\\----------------------------------------------------- 0002.1: read_ca// 1000 times 0.62(0.58+0.04) 0.61(0.58+0.02) -1.6% Suggested-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: René Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/read-cache.c b/read-cache.c
index 04ed561..4245f8e 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1518,8 +1518,9 @@ int discard_index(struct index_state *istate)
free_name_hash(istate);
cache_tree_free(&(istate->cache_tree));
istate->initialized = 0;
-
- /* no need to throw away allocated active_cache */
+ free(istate->cache);
+ istate->cache = NULL;
+ istate->cache_alloc = 0;
return 0;
}