From: Miklos Szeredi Date: Sun, 27 Nov 2005 19:22:42 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: fuse_2_5_0_pre1~12 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=a90b7349306f10b2a9bde9a2537bf9a852452da4;p=qemu-gpiodev%2Flibfuse.git *** empty log message *** --- 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;