Hi, I have no idea what the problem could be, but maybe I will be lucky with my suggestions. On Fri, Apr 15, 2011 at 6:54 PM, Seth Jennings <spartacus06@xxxxxxxxx> wrote: > There is a git-daemon segfault issue that seems to be specific to AIX. > > Whenever a remote user pulls or clones, the operation succeeds but > git-daemon crashes immediately afterward. > > $ gdb git-daemon core > ... > Core was generated by `git-daemon'. > Program terminated with signal 11, Segmentation fault. > #0 0xd04f0c50 in _sigsetmask () from /usr/lib/libpthreads.a(shr_xpg5.o) > (gdb) where > #0 0xd04f0c50 in _sigsetmask () from /usr/lib/libpthreads.a(shr_xpg5.o) > #1 0xd04f1874 in _p_sigaction () from /usr/lib/libpthreads.a(shr_xpg5.o) > #2 0xd013ae34 in sigaction () from /usr/lib/libc.a(shr.o) > #3 0xd0217cd8 in signal () from /usr/lib/libc.a(shr.o) signal() is calling sigaction() so sigaction() must be called with different parameters in your patch and when it crashes. Could you have a look at the difference between parameters? > #4 0x10000b90 in child_handler (signo=0) at daemon.c:718 > #5 <signal handler called> > > Through experimentation, I found that using sigaction() instead of > signal() resolves the issue. I'm not entirely sure why this is. > > Any feedback about the issue or the patch is welcome. There might be > a better solution. > > On Fri, Apr 15, 2011 at 11:51 AM, Seth Jennings <spartacus06@xxxxxxxxx> wrote: >> This issue seems to be specific to git-daemon on AIX built with xlc. >> After commit 695605b5080e1957bd9dab1fed35a7fee9814297 (from Aug 2008), >> git-daemon segfaults in child_handler() inside the signal() syscall >> immediately after any remote clone/pull operation. Could you try some variants that revert or change parts of this commit? For example you could revert only this hunk: @@ -1036,11 +1032,6 @@ int main(int argc, char **argv) gid_t gid = 0; int i; - /* Without this we cannot rely on waitpid() to tell - * what happened to our children. - */ - signal(SIGCHLD, SIG_DFL); - for (i = 1; i < argc; i++) { char *arg = argv[i]; >> While it is not >> fully understood why this happens, changing signal() to sigaction() >> resolves the issue. Yeah but it would be nice to understand. Thanks in advance, Christian. -- 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