John Cai via GitGitGadget píše v Po 26. 09. 2022 v 23:53 +0000: > From: John Cai <johncai86@xxxxxxxxx> > > In the tmp-objdir api, tmp_objdir_create will create a temporary > directory but also register signal handlers responsible for removing > the directory's contents and the directory itself. However, the > function responsible for recursively removing the contents and > directory, remove_dir_recurse() calls opendir(3) and closedir(3). > This can be problematic because these functions allocate and free > memory, which are not async-signal-safe functions. This can lead to > deadlocks. > > One place we call tmp_objdir_create() is in git-receive-pack, where > we create a temporary quarantine directory "incoming". Incoming > objects will be written to this directory before they get moved to > the object directory. Just noticed this unattended git crash in the logs and I think it might actually be another occurrence of the same problem in principle, so shamelessly piggy-backing the stack trace here (no coredump preserved at this point, sorry): #0 0x00007f08df0ea06c __pthread_kill_implementation (libc.so.6 + 0x8b06c) #1 0x00007f08df098046 raise (libc.so.6 + 0x39046) #2 0x00007f08df0817fc abort (libc.so.6 + 0x227fc) #3 0x00007f08df082533 __libc_message.cold (libc.so.6 + 0x23533) #4 0x00007f08df090a67 __libc_assert_fail (libc.so.6 + 0x31a67) #5 0x00007f08df0f68f2 sysmalloc (libc.so.6 + 0x978f2) #6 0x00007f08df0f7789 _int_malloc (libc.so.6 + 0x98789) #7 0x00007f08df0f80d2 __libc_malloc (libc.so.6 + 0x990d2) #8 0x00007f08df12fa55 __alloc_dir (libc.so.6 + 0xd0a55) ->#9 0x00007f08df12fac2 opendir_tail (libc.so.6 + 0xd0ac2) #10 0x00005632ea10c823 remove_temporary_files.lto_priv.0 (git + 0xdc823) ->#11 0x00005632ea10c97c remove_pack_on_signal.lto_priv.0 (git + 0xdc97c) #12 0x00007f08df0980f0 __restore_rt (libc.so.6 + 0x390f0) #13 0x00007f08df0f7775 _int_malloc (libc.so.6 + 0x98775) #14 0x00007f08df0f80d2 __libc_malloc (libc.so.6 + 0x990d2) #15 0x00007f08df0d2b44 _IO_file_doallocate (libc.so.6 + 0x73b44) #16 0x00007f08df0e1d20 _IO_doallocbuf (libc.so.6 + 0x82d20) #17 0x00007f08df0e0a8c _IO_file_underflow@@GLIBC_2.2.5 (libc.so.6 + 0x81a8c) #18 0x00007f08df0d4598 __getdelim (libc.so.6 + 0x75598) #19 0x00005632ea29f372 strbuf_getwholeline (git + 0x26f372) #20 0x00005632ea117915 cmd_repack (git + 0xe7915) #21 0x00005632ea0556fa handle_builtin.lto_priv.0 (git + 0x256fa) #22 0x00005632ea050551 main (git + 0x20551) #23 0x00007f08df082a50 __libc_start_call_main (libc.so.6 + 0x23a50) #24 0x00007f08df082b09 __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x23b09) #25 0x00005632ea051555 _start (git + 0x21555) As per the captured info, following Fedora x86_64 packages were involved: git-2.37.3-1.fc38 zlib-1.2.12-5.fc38 pcre2-10.40-1.fc37.1 Full command at hand: /usr/libexec/git-core/git repack -d -l --no-write-bitmap-index It happened twice, actually, about a week's time apart, but that was a month ago while this unattended task runs hourly till today and git hasn't been updated since. Not subscribed to the list and I don't think I can provide more info on this, but feel free to contact me directly. -- poki