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 #include <libaudcore/eventqueue.h>
00025
00026 #include "config.h"
00027
00028 #ifdef HAVE_SIGWAIT
00029 static sigset_t signal_set;
00030
00031 static void * signal_thread (void * data)
00032 {
00033 gint signal;
00034
00035 while (! sigwait (& signal_set, & signal))
00036 event_queue ("quit", NULL);
00037
00038 return NULL;
00039 }
00040 #endif
00041
00042
00043 void signals_init (void)
00044 {
00045 #ifdef HAVE_SIGWAIT
00046 sigemptyset (& signal_set);
00047 sigaddset (& signal_set, SIGHUP);
00048 sigaddset (& signal_set, SIGINT);
00049 sigaddset (& signal_set, SIGQUIT);
00050 sigaddset (& signal_set, SIGTERM);
00051
00052 sigprocmask (SIG_BLOCK, & signal_set, NULL);
00053 g_thread_create (signal_thread, NULL, FALSE, NULL);
00054 #endif
00055 }