aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2023-02-21 15:21:12 +0800
committerIan Kent <raven@themaw.net>2023-03-25 10:49:21 +0800
commite02c124c00221ad989970cec58b388f913a0844d (patch)
tree592883910ba0c53f5e95a6169d6274f39c3596df
parent8fe9c03e44ec58ed7bf0922c9e8c06c5b9cbd7a7 (diff)
downloadautofs-e02c124c00221ad989970cec58b388f913a0844d.tar.gz
autofs-5.1.8 - make signal handling consistent
There's a mixture of usage of sigprocmask() and pthread_sigmask(), change to use the pthread versions of this for correctness. The only exception to this is reset_signals() which is done in a forked process that is single threaded so it's valid to keep them as they are. Signed-off-by: Ian Kent <raven@themaw.net>
-rw-r--r--CHANGELOG1
-rw-r--r--daemon/automount.c8
-rw-r--r--daemon/spawn.c1
3 files changed, 5 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 27e706a0..087dff58 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -62,6 +62,7 @@
- dont delay expire.
- make amd mapent search function name clear.
- rename statemachine() to signal_handler().
+- make signal handling consistent.
19/10/2021 autofs-5.1.8
- add xdr_exports().
diff --git a/daemon/automount.c b/daemon/automount.c
index 0df82315..624d3349 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -2250,7 +2250,7 @@ static void do_master_list_reset(struct master *master)
static int do_master_read_master(struct master *master, time_t *age, int wait)
{
- sigset_t signalset;
+ sigset_t signalset, savesigset;
/* Wait must be at least 1 second */
unsigned int retry_wait = 2;
unsigned int elapsed = 0;
@@ -2261,7 +2261,7 @@ static int do_master_read_master(struct master *master, time_t *age, int wait)
sigaddset(&signalset, SIGTERM);
sigaddset(&signalset, SIGINT);
sigaddset(&signalset, SIGHUP);
- sigprocmask(SIG_UNBLOCK, &signalset, NULL);
+ pthread_sigmask(SIG_UNBLOCK, &signalset, &savesigset);
while (1) {
struct timespec t = { retry_wait, 0 };
@@ -2287,7 +2287,7 @@ static int do_master_read_master(struct master *master, time_t *age, int wait)
}
}
- sigprocmask(SIG_BLOCK, &signalset, NULL);
+ pthread_sigmask(SIG_SETMASK, &savesigset, NULL);
return ret;
}
@@ -2336,7 +2336,7 @@ int main(int argc, char *argv[])
sigdelset(&block_sigs, SIGILL);
sigdelset(&block_sigs, SIGFPE);
sigdelset(&block_sigs, SIGTRAP);
- sigprocmask(SIG_BLOCK, &block_sigs, NULL);
+ pthread_sigmask(SIG_BLOCK, &block_sigs, NULL);
program = argv[0];
diff --git a/daemon/spawn.c b/daemon/spawn.c
index 85f7959c..452a18d0 100644
--- a/daemon/spawn.c
+++ b/daemon/spawn.c
@@ -46,7 +46,6 @@ void dump_core(void)
sigemptyset(&segv);
sigaddset(&segv, SIGSEGV);
pthread_sigmask(SIG_UNBLOCK, &segv, NULL);
- sigprocmask(SIG_UNBLOCK, &segv, NULL);
raise(SIGSEGV);
}