~x3lectric/ntfs-3g/trunk

« back to all changes in this revision

Viewing changes to libfuse-lite/fuse_signals.c

  • Committer: Jean-Pierre André
  • Date: 2015-04-17 09:14:36 UTC
  • Revision ID: git-v1:3d1c87d0d926992c1fde3e135195f137ed9c8b8d
Fixed setting SIG_DFL on fuse session exit

This is a backport of a fix applied to the (external) fuse library

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
        fuse_session_exit(fuse_instance);
23
23
}
24
24
 
25
 
static int set_one_signal_handler(int sig, void (*handler)(int))
 
25
static int set_one_signal_handler(int sig, void (*handler)(int), int remove)
26
26
{
27
27
    struct sigaction sa;
28
28
    struct sigaction old_sa;
29
29
 
30
30
    memset(&sa, 0, sizeof(struct sigaction));
31
 
    sa.sa_handler = handler;
 
31
    sa.sa_handler = remove ? SIG_DFL : handler;
32
32
    sigemptyset(&(sa.sa_mask));
33
33
    sa.sa_flags = 0;
34
34
 
37
37
        return -1;
38
38
    }
39
39
 
40
 
    if (old_sa.sa_handler == SIG_DFL &&
 
40
    if (old_sa.sa_handler == (remove ? handler : SIG_DFL) &&
41
41
        sigaction(sig, &sa, NULL) == -1) {
42
42
        perror("fuse: cannot set signal handler");
43
43
        return -1;
47
47
 
48
48
int fuse_set_signal_handlers(struct fuse_session *se)
49
49
{
50
 
    if (set_one_signal_handler(SIGHUP, exit_handler) == -1 ||
51
 
        set_one_signal_handler(SIGINT, exit_handler) == -1 ||
52
 
        set_one_signal_handler(SIGTERM, exit_handler) == -1 ||
53
 
        set_one_signal_handler(SIGPIPE, SIG_IGN) == -1)
 
50
    if (set_one_signal_handler(SIGHUP, exit_handler, 0) == -1 ||
 
51
        set_one_signal_handler(SIGINT, exit_handler, 0) == -1 ||
 
52
        set_one_signal_handler(SIGTERM, exit_handler, 0) == -1 ||
 
53
        set_one_signal_handler(SIGPIPE, SIG_IGN, 0) == -1)
54
54
        return -1;
55
55
 
56
56
    fuse_instance = se;
65
65
    else
66
66
        fuse_instance = NULL;
67
67
 
68
 
    set_one_signal_handler(SIGHUP, SIG_DFL);
69
 
    set_one_signal_handler(SIGINT, SIG_DFL);
70
 
    set_one_signal_handler(SIGTERM, SIG_DFL);
71
 
    set_one_signal_handler(SIGPIPE, SIG_DFL);
 
68
    set_one_signal_handler(SIGHUP, exit_handler, 1);
 
69
    set_one_signal_handler(SIGINT, exit_handler, 1);
 
70
    set_one_signal_handler(SIGTERM, exit_handler, 1);
 
71
    set_one_signal_handler(SIGPIPE, SIG_IGN, 1);
72
72
}
73
73