From 8af18155daaeec5af26a87ac1d607fe6817bc05c Mon Sep 17 00:00:00 2001 From: didg Date: Thu, 13 Nov 2003 15:39:02 +0000 Subject: [PATCH] unblock signals in children (cf previous commit for RH9 ) --- include/atalk/server_child.h | 1 + libatalk/asp/asp_getsess.c | 5 ++--- libatalk/dsi/dsi_tcp.c | 7 +++---- libatalk/util/server_child.c | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/include/atalk/server_child.h b/include/atalk/server_child.h index 7112e069..d371ef27 100644 --- a/include/atalk/server_child.h +++ b/include/atalk/server_child.h @@ -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 diff --git a/libatalk/asp/asp_getsess.c b/libatalk/asp/asp_getsess.c index ee384fc7..30ab8375 100644 --- a/libatalk/asp/asp_getsess.c +++ b/libatalk/asp/asp_getsess.c @@ -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 ) diff --git a/libatalk/dsi/dsi_tcp.c b/libatalk/dsi/dsi_tcp.c index d9017f0c..a90cc9e3 100644 --- a/libatalk/dsi/dsi_tcp.c +++ b/libatalk/dsi/dsi_tcp.c @@ -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; diff --git a/libatalk/util/server_child.c b/libatalk/util/server_child.c index 5a82c283..cf626d29 100644 --- a/libatalk/util/server_child.c +++ b/libatalk/util/server_child.c @@ -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 #endif /* HAVE_SYS_WAIT_H */ +#include + #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); + +} -- 2.39.2