]> arthur.barton.de Git - netatalk.git/commitdiff
unblock signals in children (cf previous commit for RH9 )
authordidg <didg>
Thu, 13 Nov 2003 15:39:02 +0000 (15:39 +0000)
committerdidg <didg>
Thu, 13 Nov 2003 15:39:02 +0000 (15:39 +0000)
include/atalk/server_child.h
libatalk/asp/asp_getsess.c
libatalk/dsi/dsi_tcp.c
libatalk/util/server_child.c

index 7112e06964ffbd6633f16000443d35ba0bd43725..d371ef27615eb6f05ebde930d730aac4a78c4421 100644 (file)
@@ -36,5 +36,6 @@ extern void server_child_kill_one_by_id __P((server_child *children, const int f
 
 extern void server_child_setup __P((server_child *, const int, void (*)()));
 extern void server_child_handler __P((server_child *));
+extern void server_reset_signal __P((void));
 
 #endif
index ee384fc72db56776189d3ce074a73f9ea2dff7e3..30ab837582f1094e2b32a9f80e7dc5a9495de6ed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: asp_getsess.c,v 1.7.8.1 2003-11-11 08:48:33 didg Exp $
+ * $Id: asp_getsess.c,v 1.7.8.2 2003-11-13 15:39:02 didg Exp $
  *
  * Copyright (c) 1990,1996 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -219,8 +219,7 @@ ASP asp_getsession(ASP asp, server_child *server_children,
 
        switch ((pid = fork())) {
        case 0 : /* child */
-         signal(SIGTERM, SIG_DFL);
-         signal(SIGHUP, SIG_DFL);
+         server_reset_signal();
          /* free/close some things */
          for (i = 0; i < children->nsessions; i++ ) {
            if ( asp_ac[i] != NULL )
index d9017f0cbf88873691bc7b818bf6d1742cbf55d5..a90cc9e371446f00f04fa75f1fef18502da56f42 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: dsi_tcp.c,v 1.9.10.2 2003-11-11 08:48:33 didg Exp $
+ * $Id: dsi_tcp.c,v 1.9.10.3 2003-11-13 15:39:02 didg Exp $
  *
  * Copyright (c) 1997, 1998 Adrian Sun (asun@zoology.washington.edu)
  * All rights reserved. See COPYRIGHT.
@@ -132,9 +132,8 @@ static int dsi_tcp_open(DSI *dsi)
     u_int8_t block[DSI_BLOCKSIZ];
     size_t stored;
     
-    /* reset a couple signals */
-    signal(SIGTERM, SIG_DFL); 
-    signal(SIGHUP, SIG_DFL);
+    /* reset signals */
+    server_reset_signal();
 
     /* install an alarm to deal with non-responsive connections */
     newact.sa_handler = timeout_handler;
index 5a82c283efac43fef27f3526521ca9826d4be186..cf626d29ca0409a0b656745e309cb3e803f65cb9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: server_child.c,v 1.7.4.1.2.1 2003-11-11 08:48:33 didg Exp $
+ * $Id: server_child.c,v 1.7.4.1.2.2 2003-11-13 15:39:02 didg Exp $
  *
  * Copyright (c) 1997 Adrian Sun (asun@zoology.washington.edu)
  * All rights reserved. See COPYRIGHT.
@@ -31,6 +31,8 @@
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #endif /* HAVE_SYS_WAIT_H */
+#include <sys/time.h>
+
 #ifndef WEXITSTATUS
 #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
 #endif /* ! WEXITSTATUS */
@@ -356,3 +358,32 @@ void server_child_handler(server_child *children)
     }
   }
 }
+
+/* --------------------------- 
+ * reset children signals
+*/
+void server_reset_signal(void)
+{
+    struct sigaction    sv;
+    sigset_t            sigs;
+    const struct itimerval none = {{0, 0}, {0, 0}};
+
+    setitimer(ITIMER_REAL, &none, NULL);
+    memset(&sv, 0, sizeof(sv));
+    sv.sa_handler =  SIG_DFL;
+    sigemptyset( &sv.sa_mask );
+    
+    sigaction(SIGALRM, &sv, 0 );
+    sigaction(SIGHUP,  &sv, 0 );
+    sigaction(SIGTERM, &sv, 0 );
+    sigaction(SIGUSR1, &sv, 0 );
+    sigaction(SIGCHLD, &sv, 0 );
+    
+    sigemptyset(&sigs);
+    sigaddset(&sigs, SIGALRM);
+    sigaddset(&sigs, SIGHUP);
+    sigaddset(&sigs, SIGUSR1);
+    sigaddset(&sigs, SIGCHLD);
+    sigprocmask(SIG_UNBLOCK, &sigs, NULL);
+        
+}