Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2014-10-04 21:50:57 +0200
committerArthur de Jong <arthur@arthurdejong.org>2014-10-04 21:50:57 +0200
commit1d3b19b1ecd3b10f36e8925e8a752a28e3e74b56 (patch)
tree53652751001d221817e242c52b63b9f101756bbd
parent78627c97f9ff4a15e6b54f45877cf4459ac6db17 (diff)
Block signals sooner to avoid race conditions
-rw-r--r--nslcd/nslcd.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/nslcd/nslcd.c b/nslcd/nslcd.c
index e7dbb65..a0c67a6 100644
--- a/nslcd/nslcd.c
+++ b/nslcd/nslcd.c
@@ -648,6 +648,17 @@ int main(int argc, char *argv[])
#ifdef HAVE_PTHREAD_TIMEDJOIN_NP
struct timespec ts;
#endif /* HAVE_PTHREAD_TIMEDJOIN_NP */
+ /* block all these signals so our worker threads won't handle them */
+ sigemptyset(&signalmask);
+ sigaddset(&signalmask, SIGHUP);
+ sigaddset(&signalmask, SIGINT);
+ sigaddset(&signalmask, SIGQUIT);
+ sigaddset(&signalmask, SIGABRT);
+ sigaddset(&signalmask, SIGPIPE);
+ sigaddset(&signalmask, SIGTERM);
+ sigaddset(&signalmask, SIGUSR1);
+ sigaddset(&signalmask, SIGUSR2);
+ pthread_sigmask(SIG_BLOCK, &signalmask, &oldmask);
/* close all file descriptors (except stdin/out/err) */
daemonize_closefds();
/* parse the command line */
@@ -785,17 +796,6 @@ int main(int argc, char *argv[])
}
log_log(LOG_DEBUG, "setuid(%ul) done", (unsigned long int)nslcd_cfg->uid);
}
- /* block all these signals so our worker threads won't handle them */
- sigemptyset(&signalmask);
- sigaddset(&signalmask, SIGHUP);
- sigaddset(&signalmask, SIGINT);
- sigaddset(&signalmask, SIGQUIT);
- sigaddset(&signalmask, SIGABRT);
- sigaddset(&signalmask, SIGPIPE);
- sigaddset(&signalmask, SIGTERM);
- sigaddset(&signalmask, SIGUSR1);
- sigaddset(&signalmask, SIGUSR2);
- pthread_sigmask(SIG_BLOCK, &signalmask, &oldmask);
/* start worker threads */
log_log(LOG_INFO, "accepting connections");
nslcd_threads = (pthread_t *)malloc(nslcd_cfg->threads * sizeof(pthread_t));