aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Nikolaus Rath <Nikolaus@rath.org>2017-05-24 15:56:41 -0700
committerGravatar Nikolaus Rath <Nikolaus@rath.org>2017-05-24 15:58:30 -0700
commit9b6e15406bd83a722cb07ed37709d94308d9e22e (patch)
treeadecf1f1ce24121cfbbf7bff929febfaf2e99013 /lib
parente90bb40f9cddd3dfc403328de21f538b77f814b3 (diff)
fuse_signals.c: use new do_nothing function instead of SIG_IGN
Fixes: #160.
Diffstat (limited to 'lib')
-rw-r--r--lib/fuse_signals.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/fuse_signals.c b/lib/fuse_signals.c
index a1bf1d5..db059e1 100644
--- a/lib/fuse_signals.c
+++ b/lib/fuse_signals.c
@@ -32,6 +32,11 @@ static void exit_handler(int sig)
}
}
+static void do_nothing(int sig)
+{
+ (void) sig;
+}
+
static int set_one_signal_handler(int sig, void (*handler)(int), int remove)
{
struct sigaction sa;
@@ -57,10 +62,15 @@ static int set_one_signal_handler(int sig, void (*handler)(int), int remove)
int fuse_set_signal_handlers(struct fuse_session *se)
{
+ /* If we used SIG_IGN instead of the do_nothing function,
+ then we would be unable to tell if we set SIG_IGN (and
+ thus should reset to SIG_DFL in fuse_remove_signal_handlers)
+ or if it was already set to SIG_IGN (and should be left
+ untouched. */
if (set_one_signal_handler(SIGHUP, exit_handler, 0) == -1 ||
set_one_signal_handler(SIGINT, exit_handler, 0) == -1 ||
set_one_signal_handler(SIGTERM, exit_handler, 0) == -1 ||
- set_one_signal_handler(SIGPIPE, SIG_IGN, 0) == -1)
+ set_one_signal_handler(SIGPIPE, do_nothing, 0) == -1)
return -1;
fuse_instance = se;
@@ -78,5 +88,5 @@ void fuse_remove_signal_handlers(struct fuse_session *se)
set_one_signal_handler(SIGHUP, exit_handler, 1);
set_one_signal_handler(SIGINT, exit_handler, 1);
set_one_signal_handler(SIGTERM, exit_handler, 1);
- set_one_signal_handler(SIGPIPE, SIG_IGN, 1);
+ set_one_signal_handler(SIGPIPE, do_nothing, 1);
}