diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2014-10-04 21:50:57 +0200 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2014-10-04 21:50:57 +0200 |
commit | 1d3b19b1ecd3b10f36e8925e8a752a28e3e74b56 (patch) | |
tree | 53652751001d221817e242c52b63b9f101756bbd | |
parent | 78627c97f9ff4a15e6b54f45877cf4459ac6db17 (diff) |
Block signals sooner to avoid race conditions
-rw-r--r-- | nslcd/nslcd.c | 22 |
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)); |