* adm_listen.c (kill_children): use sigprocmask if available
authorMark Eichin <eichin@mit.edu>
Tue, 1 Nov 1994 23:24:08 +0000 (23:24 +0000)
committerMark Eichin <eichin@mit.edu>
Tue, 1 Nov 1994 23:24:08 +0000 (23:24 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4605 dc483132-0cff-0310-8789-dd5450dbe970

src/kadmin/server/ChangeLog
src/kadmin/server/adm_listen.c

index 7ca21a3027b897816d2143ef3902f87171e8ff9e..9b65ef73165708c665fca3fe8f33dcd77eed5404 100644 (file)
@@ -1,3 +1,7 @@
+Tue Nov  1 18:19:36 1994  Mark Eichin  (eichin@cygnus.com)
+
+       * adm_listen.c (kill_children): use sigprocmask if available.
+
 Wed Oct 19 17:40:22 1994  Theodore Y. Ts'o  (tytso@dcl)
 
        * adm_server.c (main): Select the cryptosystem to be used using
index d5ef808e842106a20180a975473fad8419d6ffc9..1a1ef5dfdf085afe7b422280e2796c4f710a2152 100644 (file)
 #include <signal.h>
 #include <com_err.h>
 
-#ifdef USE_SIGPROCMASK
-/* fake sigmask, sigblock, sigsetmask */
-#include <signal.h>
-#define sigmask(x) (1L<<(x)-1)
-#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
-static int _fake_sigstore;
-#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
-#endif
-
 #ifndef sigmask
 #define sigmask(m)    (1 <<((m)-1))
 #endif
@@ -58,6 +49,38 @@ static int _fake_sigstore;
 
 int adm_debug_flag = 0;
 
+#ifdef USE_SIGPROCMASK
+/* just do it right */
+void
+kill_children()
+{
+    int i;
+    sigset_t old, new;
+
+    sigemptyset(&old);
+    sigemptyset(&new);
+    sigaddset(&new,SIGCHLD);
+    sigprocmask(SIG_BLOCK, &new, &old);
+
+    for (i = 0; i < pidarraysize; i++) {
+       kill(pidarray[i], SIGINT);
+       krb_log("killing child %d", pidarray[i]);
+    }
+
+    sigprocmask(SIG_SETMASK, &old, NULL);
+}
+
+#else
+
+#ifdef USE_SIGPROCMASK
+/* fake sigmask, sigblock, sigsetmask */
+#include <signal.h>
+#define sigmask(x) (1L<<(x)-1)
+#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
+static int _fake_sigstore;
+#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
+#endif
+
 void
 kill_children()
 {
@@ -74,6 +97,7 @@ kill_children()
     sigsetmask(osigmask);
     return;
 }
+#endif /* HAVE_SIGSET */
 
 /*
 adm5_listen_and_process - listen on the admin servers port for a request