12 #include "fuse_lowlevel.h" 20 static struct fuse_session *fuse_instance;
22 static void exit_handler(
int sig)
28 fprintf(stderr,
"assertion error: signal value <= 0\n");
31 fuse_instance->error = sig;
35 static void do_nothing(
int sig)
40 static int set_one_signal_handler(
int sig,
void (*handler)(
int),
int remove)
43 struct sigaction old_sa;
45 memset(&sa, 0,
sizeof(
struct sigaction));
46 sa.sa_handler =
remove ? SIG_DFL : handler;
47 sigemptyset(&(sa.sa_mask));
50 if (sigaction(sig, NULL, &old_sa) == -1) {
51 perror(
"fuse: cannot get old signal handler");
55 if (old_sa.sa_handler == (
remove ? handler : SIG_DFL) &&
56 sigaction(sig, &sa, NULL) == -1) {
57 perror(
"fuse: cannot set signal handler");
70 if (set_one_signal_handler(SIGHUP, exit_handler, 0) == -1 ||
71 set_one_signal_handler(SIGINT, exit_handler, 0) == -1 ||
72 set_one_signal_handler(SIGTERM, exit_handler, 0) == -1 ||
73 set_one_signal_handler(SIGPIPE, do_nothing, 0) == -1)
82 if (fuse_instance != se)
84 "fuse: fuse_remove_signal_handlers: unknown session\n");
88 set_one_signal_handler(SIGHUP, exit_handler, 1);
89 set_one_signal_handler(SIGINT, exit_handler, 1);
90 set_one_signal_handler(SIGTERM, exit_handler, 1);
91 set_one_signal_handler(SIGPIPE, do_nothing, 1);
void fuse_remove_signal_handlers(struct fuse_session *se)
int fuse_set_signal_handlers(struct fuse_session *se)
void fuse_session_exit(struct fuse_session *se)