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