00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <signal.h>
00023 #include <glib.h>
00024
00025 #include <libaudcore/hook.h>
00026
00027 #include "config.h"
00028 #include "main.h"
00029
00030 #ifdef HAVE_SIGWAIT
00031 static sigset_t signal_set;
00032
00033 static void * signal_thread (void * data)
00034 {
00035 int signal;
00036
00037 while (! sigwait (& signal_set, & signal))
00038 event_queue ("quit", NULL);
00039
00040 return NULL;
00041 }
00042 #endif
00043
00044
00045 void signals_init (void)
00046 {
00047 #ifdef HAVE_SIGWAIT
00048 sigemptyset (& signal_set);
00049 sigaddset (& signal_set, SIGHUP);
00050 sigaddset (& signal_set, SIGINT);
00051 sigaddset (& signal_set, SIGQUIT);
00052 sigaddset (& signal_set, SIGTERM);
00053
00054 sigprocmask (SIG_BLOCK, & signal_set, NULL);
00055 g_thread_create (signal_thread, NULL, FALSE, NULL);
00056 #endif
00057 }