Code

Fix refs.c;:repack_without_ref() clean-up path
authorJunio C Hamano <junkio@cox.net>
Sun, 1 Oct 2006 18:41:00 +0000 (11:41 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 1 Oct 2006 18:41:00 +0000 (11:41 -0700)
The function repack_without_ref() passes a lock-file structure
on the stack to hold_lock_file_for_update(), which in turn
registers it to be cleaned up via atexit().  This is a big
no-no.

This is the same bug James Bottomley fixed with commit
31f584c242e7af28018ff920b6c8d1952beadbd4.

Signed-off-by: Junio C Hamano <junkio@cox.net>
refs.c

diff --git a/refs.c b/refs.c
index 221eb3896ed10ff75b86ae955454636dd70f71c6..aa4c4e0b94585835298ad1785eee77462760e2d6 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -621,12 +621,13 @@ struct ref_lock *lock_any_ref_for_update(const char *ref, const unsigned char *o
        return lock_ref_sha1_basic(ref, old_sha1, NULL);
 }
 
+static struct lock_file packlock;
+
 static int repack_without_ref(const char *refname)
 {
        struct ref_list *list, *packed_ref_list;
        int fd;
        int found = 0;
-       struct lock_file packlock;
 
        packed_ref_list = get_packed_refs();
        for (list = packed_ref_list; list; list = list->next) {