diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sshfs.c | 10 |
2 files changed, 16 insertions, 0 deletions
@@ -1,3 +1,9 @@ +2006-02-16 Miklos Szeredi <miklos@szeredi.hu> + + * Block TERM/INT/HUP/QUIT signals in sshfs reading thread, so they + will always be received by the FUSE main thread. Fixes the + "double ^C" problem seen on FreeBSD. + 2006-01-31 Miklos Szeredi <miklos@szeredi.hu> * Fix problems with nodelay workaround on FreeBSD. @@ -1072,6 +1072,9 @@ static int start_processing_thread(void) { int err; pthread_t thread_id; + sigset_t oldset; + sigset_t newset; + if (sshfs.processing_thread_started) return 0; @@ -1081,12 +1084,19 @@ static int start_processing_thread(void) return -EIO; } + sigemptyset(&newset); + sigaddset(&newset, SIGTERM); + sigaddset(&newset, SIGINT); + sigaddset(&newset, SIGHUP); + sigaddset(&newset, SIGQUIT); + pthread_sigmask(SIG_BLOCK, &newset, &oldset); err = pthread_create(&thread_id, NULL, process_requests, NULL); if (err) { fprintf(stderr, "failed to create thread: %s\n", strerror(err)); return -EIO; } pthread_detach(thread_id); + pthread_sigmask(SIG_SETMASK, &oldset, NULL); sshfs.processing_thread_started = 1; return 0; } |