Skip to content

Commit

Permalink
read-cache: free cache in discard_index
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Jun 10, 2013
1 parent 1ecb5ff commit a0fc4db
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit a0fc4db

Please sign in to comment.