diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-11-27 19:22:42 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2005-11-27 19:22:42 +0000 |
commit | a90b7349306f10b2a9bde9a2537bf9a852452da4 (patch) | |
tree | a3ea2ccf59b9f6a77982409dde1d2180326fb022 | |
parent | bac4c77aad6314ec44a917492a45834ba5575c5c (diff) | |
download | libfuse-a90b7349306f10b2a9bde9a2537bf9a852452da4.tar.gz |
*** empty log message ***
-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; |