diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/fuse_loop_mt.c | 14 |
2 files changed, 19 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2005-11-27 Miklos Szeredi <miklos@szeredi.hu> + + * 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 <miklos@szeredi.hu> * 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; |