X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fsignals.c;h=5cb6f369b94437bc5a6c552a3829464ea5b54e11;hb=e17d5ecd8918a78c8ecbff36110292c1caaafd26;hp=7b63cbc496453dcb995375dfae665b6925da03fb;hpb=63a901056a9d3df3986546d87fb7c19d53190122;p=vlc diff --git a/modules/control/signals.c b/modules/control/signals.c index 7b63cbc496..5cb6f369b9 100644 --- a/modules/control/signals.c +++ b/modules/control/signals.c @@ -84,6 +84,16 @@ static void Close (vlc_object_t *obj) free (p_sys); } +static bool ignored (int signum) +{ + struct sigaction sa; + + if (sigaction (signum, NULL, &sa)) + return false; + return ((sa.sa_flags & SA_SIGINFO) + ? (void *)sa.sa_sigaction : (void *)sa.sa_handler) == SIG_IGN; +} + static void *SigThread (void *data) { intf_thread_t *obj = data; @@ -91,7 +101,8 @@ static void *SigThread (void *data) int signum; sigemptyset (&set); - sigaddset (&set, SIGHUP); + if (!ignored (SIGHUP)) /* <- needed to handle nohup properly */ + sigaddset (&set, SIGHUP); sigaddset (&set, SIGINT); sigaddset (&set, SIGQUIT); sigaddset (&set, SIGTERM); @@ -100,7 +111,7 @@ static void *SigThread (void *data) do { - sigwait (&set, &signum); + while (sigwait (&set, &signum)); #ifdef __APPLE__ /* In Mac OS X up to 10.5 sigwait (among others) is not a pthread