git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-daemon: fix segfaulting in child_handler() in AIX
@ 2011-04-15 16:51 Seth Jennings
  2011-04-15 16:54 ` Seth Jennings
  2011-04-21 20:43 ` Erik Faye-Lund
  0 siblings, 2 replies; 5+ messages in thread
From: Seth Jennings @ 2011-04-15 16:51 UTC (permalink / raw)
  To: git; +Cc: Seth Jennings

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.  While it is not
fully understood why this happens, changing signal() to sigaction()
resolves the issue.

This commit converts singal() to sigaction() in child_handler().
---
 daemon.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/daemon.c b/daemon.c
index 4c8346d..3ea5b2c 100644
--- a/daemon.c
+++ b/daemon.c
@@ -715,7 +715,10 @@ static void child_handler(int signo)
 	 * upon signal receipt
 	 * SysV needs the handler to be rearmed
 	 */
-	signal(SIGCHLD, child_handler);
+	struct sigaction sigact;
+	memset(&sigact, 0, sizeof(sigact));
+	sigact.sa_handler = child_handler;
+	sigaction(SIGCHLD, &sigact, NULL);
 }
 
 static int set_reuse_addr(int sockfd)
@@ -889,7 +892,10 @@ static int service_loop(struct socketlist *socklist)
 		pfd[i].events = POLLIN;
 	}
 
-	signal(SIGCHLD, child_handler);
+	struct sigaction sigact;
+	memset(&sigact, 0, sizeof(sigact));
+	sigact.sa_handler = child_handler;
+	sigaction(SIGCHLD, &sigact, NULL);
 
 	for (;;) {
 		int i;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-05-02 17:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-15 16:51 [PATCH] git-daemon: fix segfaulting in child_handler() in AIX Seth Jennings
2011-04-15 16:54 ` Seth Jennings
2011-04-20 12:53   ` Christian Couder
2011-05-02 17:51     ` Seth Jennings
2011-04-21 20:43 ` Erik Faye-Lund

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).