From: Miklos S. <mi...@sz...> - 2012-01-23 16:32:26
|
Andrew Tomazos <an...@to...> writes: > Hey all, > > So I figured out what was going on in my case anyway: > > Normally if a signal handler is executed while a system call (such as > read(2)) is blocking, the system call returns immediately (after the > signal handler is completed executing) with an EINTR. This is clearly > the behaviour that fuse_session_loop and fuse_session_exit were > designed for. > > However if the signal handler is installed with the SA_RESTART flag > set (see sigaction(2)) the system call will not return with EINTR > after the signal handler has executed. The system call will resume > blocking instead. > > For some reason on my system (Ubuntu 11.10 x86_64) the default > behaviour of signal(2) is to install the signal handler with the > SA_RESTART flag. Why do you need to install your own signal handler? As I've said, the cleanest way to do this is to use the default signal handlers provided by fuse and do your own cleanup after fuse_loop/_mt() or fuse_main(), whichever you are using. Thanks, Miklos |