On Tuesday 26 February 2008, Johan Herland wrote: > Running this test with GDB, I get the following backtrace: > > #0 0x0000000000474b87 in is_null_sha1 (sha1=0x100000008 <Address 0x100000008 out of bounds>) at cache.h:464 > #1 0x0000000000474ad3 in do_one_ref (base=0x4dc8ff "refs/", fn=0x419471 <setup_tmp_ref>, trim=0, cb_data=0x7498d0, entry=0xffffffff) at refs.c:474 > #2 0x0000000000474e28 in do_for_each_ref (base=0x4dc8ff "refs/", fn=0x419471 <setup_tmp_ref>, trim=0, cb_data=0x7498d0) at refs.c:558 > #3 0x0000000000474ecd in for_each_ref (fn=0x419471 <setup_tmp_ref>, cb_data=0x7498d0) at refs.c:580 > #4 0x0000000000419706 in setup_reference (repo=0x745070 "C/.git") at builtin-clone.c:211 > #5 0x0000000000419fce in cmd_clone (argc=2, argv=0x7fff7a282fa0, prefix=0x0) at builtin-clone.c:422 > #6 0x0000000000404ba3 in run_command (p=0x6ff710, argc=7, argv=0x7fff7a282fa0) at git.c:248 > #7 0x0000000000404d55 in handle_internal_command (argc=7, argv=0x7fff7a282fa0) at git.c:378 > #8 0x0000000000404ebe in main (argc=7, argv=0x7fff7a282fa0) at git.c:442 > > Seems the "loose" ref_list in do_for_each_ref() becomes corrupted. ...and the corruption is done when setup_tmp_ref() calls write_ref_sha1() which calls invalidate_cached_refs() (which frees the ref_list that do_for_each_ref() is iterating over). Not sure how to best solve this. Maybe setup_tmp_ref() shouldn't use write_ref_sha1(), but write the ref file directly instead, as hinted at in a comment in setup_tmp_ref()? ...Johan -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html