+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
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;