From a90b7349306f10b2a9bde9a2537bf9a852452da4 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Sun, 27 Nov 2005 19:22:42 +0000 Subject: [PATCH] *** empty log message *** --- ChangeLog | 6 ++++++ lib/fuse_loop_mt.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c153818..988a9e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-27 Miklos Szeredi + + * Block TERM, INT, HUP and QUIT signals in all but the main + thread. According to POSIX it's not specified which thread will + receive these signals. + 2005-11-22 Miklos Szeredi * Add detection of mainline FUSE code in running kernel diff --git a/lib/fuse_loop_mt.c b/lib/fuse_loop_mt.c index 95399d7..0532230 100644 --- a/lib/fuse_loop_mt.c +++ b/lib/fuse_loop_mt.c @@ -116,7 +116,19 @@ static void *do_work(void *data) static int start_thread(struct fuse_worker *w, pthread_t *thread_id) { - int res = pthread_create(thread_id, NULL, do_work, w); + sigset_t oldset; + sigset_t newset; + int res; + + /* Disallow signal reception in worker threads */ + sigemptyset(&newset); + sigaddset(&newset, SIGTERM); + sigaddset(&newset, SIGINT); + sigaddset(&newset, SIGHUP); + sigaddset(&newset, SIGQUIT); + pthread_sigmask(SIG_BLOCK, &newset, &oldset); + res = pthread_create(thread_id, NULL, do_work, w); + pthread_sigmask(SIG_SETMASK, &oldset, NULL); if (res != 0) { fprintf(stderr, "fuse: error creating thread: %s\n", strerror(res)); return -1; -- 2.30.2