Audacious  $Id:Doxyfile42802007-03-2104:39:00Znenolod$
signals.c
Go to the documentation of this file.
1 /*
2  * signals.c
3  * Copyright 2009 John Lindgren
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions, and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions, and the following disclaimer in the documentation
13  * provided with the distribution.
14  *
15  * This software is provided "as is" and without any warranty, express or
16  * implied. In no event shall the authors be liable for any damages arising from
17  * the use of this software.
18  */
19 
20 #include <pthread.h>
21 #include <signal.h>
22 
23 #include <libaudcore/hook.h>
24 
25 #include "config.h"
26 #include "main.h"
27 
28 #ifdef HAVE_SIGWAIT
29 static sigset_t signal_set;
30 
31 static void * signal_thread (void * data)
32 {
33  int signal;
34 
35  while (! sigwait (& signal_set, & signal))
36  event_queue ("quit", NULL);
37 
38  return NULL;
39 }
40 #endif
41 
42 /* Must be called before any threads are created. */
43 void signals_init (void)
44 {
45 #ifdef HAVE_SIGWAIT
46  sigemptyset (& signal_set);
47  sigaddset (& signal_set, SIGHUP);
48  sigaddset (& signal_set, SIGINT);
49  sigaddset (& signal_set, SIGQUIT);
50  sigaddset (& signal_set, SIGTERM);
51 
52  sigprocmask (SIG_BLOCK, & signal_set, NULL);
53 
54  pthread_t thread;
55  pthread_create (& thread, NULL, signal_thread, NULL);
56 #endif
57 }