Commit 20c50b9e16c19bbbf7cf38bb4bd3177596bce61b

Carlos Martín Nieto 2012-01-19T19:09:47

refs: don't leak the packref when deleting/renaming When we remove the ref from the hashtable, we need to free the packref.

diff --git a/src/refs.c b/src/refs.c
index 340841c..86e5f5d 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -984,14 +984,16 @@ static int reference_delete(git_reference *ref)
 	 * We need to reload the packfile, remove the reference from the
 	 * packing list, and repack */
 	if (ref->flags & GIT_REF_PACKED) {
+		struct packref *packref;
 		/* load the existing packfile */
 		if ((error = packed_load(ref->owner)) < GIT_SUCCESS)
 			return git__rethrow(error, "Failed to delete reference");
 
-		if (git_hashtable_remove(ref->owner->references.packfile,
-				ref->name) < GIT_SUCCESS)
+		if (git_hashtable_remove2(ref->owner->references.packfile,
+				ref->name, (void **) &packref) < GIT_SUCCESS)
 			return git__throw(GIT_ENOTFOUND, "Reference not found");
 
+		git__free (packref);
 		error = packed_write(ref->owner);
 
 	/* If the reference is loose, we can just remove the reference