From 449420e7e294e11aff835f638481fd7608778bc1 Mon Sep 17 00:00:00 2001 From: tjg Date: Fri, 10 Dec 1999 10:50:41 +0000 Subject: Bug: avoid a putative race condition in signal.c --- ChangeLog | 1 + signal.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ae0142..7a5a533 100644 --- a/ChangeLog +++ b/ChangeLog @@ -658,3 +658,4 @@ Changes since rc-1.5b2 Bug: absolute globs do still need a special case. `/*' works again now, but we still avoid creating names like `//tmp/foo'. + Bug: avoid a putative race condition in signal.c. diff --git a/signal.c b/signal.c index 8535eab..ca34dfa 100644 --- a/signal.c +++ b/signal.c @@ -85,19 +85,19 @@ extern void initsignal() { void (*h)(int); int i; - for (i = 1; i < NUMOFSIGNALS; i++) { - h = sys_signal(i, SIG_DFL); - if (h != SIG_DFL && h != SIG_ERR) - sys_signal(i, h); - sighandlers[i] = h; - } - #if HAVE_SYSV_SIGCLD /* Ensure that SIGCLD is not SIG_IGN. Solaris's rshd does this. :-( */ - h = sys_signal(SIGCLD, SIG_DFL); + h = sys_signal(SIGCLD, SIG_IGN); if (h != SIG_IGN && h != SIG_ERR) sys_signal(SIGCLD, h); else - sighandlers[SIGCLD] = SIG_DFL; + sys_signal(SIGCLD, SIG_DFL); #endif + + for (i = 1; i < NUMOFSIGNALS; i++) { + h = sys_signal(i, SIG_IGN); + if (h != SIG_IGN && h != SIG_ERR) + sys_signal(i, h); + sighandlers[i] = h; + } } -- cgit v1.2.3