11#include "fuse_config.h" 
   20static struct fuse_session *fuse_instance;
 
   22static void exit_handler(
int sig)
 
   27                        fuse_log(FUSE_LOG_ERR, 
"assertion error: signal value <= 0\n");
 
   30                fuse_instance->error = sig;
 
   34static void do_nothing(
int sig)
 
   39static int set_one_signal_handler(
int sig, 
void (*handler)(
int), 
int remove)
 
   42        struct sigaction old_sa;
 
   44        memset(&sa, 0, 
sizeof(
struct sigaction));
 
   45        sa.sa_handler = remove ? SIG_DFL : handler;
 
   46        sigemptyset(&(sa.sa_mask));
 
   49        if (sigaction(sig, NULL, &old_sa) == -1) {
 
   50                perror(
"fuse: cannot get old signal handler");
 
   54        if (old_sa.sa_handler == (remove ? handler : SIG_DFL) &&
 
   55            sigaction(sig, &sa, NULL) == -1) {
 
   56                perror(
"fuse: cannot set signal handler");
 
   69        if (set_one_signal_handler(SIGHUP, exit_handler, 0) == -1 ||
 
   70            set_one_signal_handler(SIGINT, exit_handler, 0) == -1 ||
 
   71            set_one_signal_handler(SIGTERM, exit_handler, 0) == -1 ||
 
   72            set_one_signal_handler(SIGPIPE, do_nothing, 0) == -1)
 
   81        if (fuse_instance != se)
 
   83                        "fuse: fuse_remove_signal_handlers: unknown session\n");
 
   87        set_one_signal_handler(SIGHUP, exit_handler, 1);
 
   88        set_one_signal_handler(SIGINT, exit_handler, 1);
 
   89        set_one_signal_handler(SIGTERM, exit_handler, 1);
 
   90        set_one_signal_handler(SIGPIPE, do_nothing, 1);
 
int fuse_set_signal_handlers(struct fuse_session *se)
void fuse_remove_signal_handlers(struct fuse_session *se)
void fuse_log(enum fuse_log_level level, const char *fmt,...)
void fuse_session_exit(struct fuse_session *se)