annotate src/audlegacy/signals.c @ 4844:aed7b7a97932

Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
author Tony Vroon <chainsaw@gentoo.org>
date Mon, 13 Apr 2009 00:19:52 +0100
parents 38b491487bd8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
1 /*
2892
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
2 * Audacious
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
3 * Copyright (c) 2005-2007 Yoshiki Yazawa
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
4 *
2892
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
5 * This program is free software; you can redistribute it and/or modify
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
6 * it under the terms of the GNU General Public License as published by
3121
3b6d316f8b09 GPL3 relicensing.
William Pitcock <nenolod@atheme-project.org>
parents: 2892
diff changeset
7 * the Free Software Foundation; under version 3 of the License.
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
8 *
2892
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
9 * This program is distributed in the hope that it will be useful,
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
12 * GNU General Public License for more details.
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
13 *
2892
2f5e02538dfa Backed out changeset 06858ea4b9d01dab0ce54891221bd1534a9c5ade
William Pitcock <nenolod@atheme.org>
parents: 2863
diff changeset
14 * You should have received a copy of the GNU General Public License
3121
3b6d316f8b09 GPL3 relicensing.
William Pitcock <nenolod@atheme-project.org>
parents: 2892
diff changeset
15 * along with this program. If not, see <http://www.gnu.org/licenses>.
3123
f1c756f39e6c Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents: 3121
diff changeset
16 *
f1c756f39e6c Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents: 3121
diff changeset
17 * The Audacious team does not consider modular code linking to
f1c756f39e6c Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents: 3121
diff changeset
18 * Audacious or using our public API to be a derived work.
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
19 */
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
20
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
21 //#define _XOPEN_SOURCE
2666
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
22 #include <unistd.h> /* for signal_check_for_broken_impl() */
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
23
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
24 #include <glib.h>
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
25 #include <glib/gi18n.h>
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
26 #include <config.h>
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
27 #include <stdlib.h>
2674
f3ee0b78150a [svn] - use pthread_sigmask(SIG_BLOCK, ...) instead of of SIG_SETMASK
nenolod
parents: 2666
diff changeset
28 #include <pthread.h> /* for pthread_sigmask() */
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
29 #include <signal.h>
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
30
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
31 #ifdef HAVE_EXECINFO_H
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
32 # include <execinfo.h>
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
33 #endif
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
34
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
35 #include "main.h"
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
36 #include "signals.h"
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
37 #include "build_stamp.h"
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
38 #ifdef USE_EGGSM
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
39 #include "eggsmclient.h"
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
40 #endif
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
41
4714
804a026057d7 Move SignalHandler function pointer typedef.
Matti Hamalainen <ccr@tnsp.org>
parents: 4693
diff changeset
42 typedef void (*SignalHandler) (gint);
804a026057d7 Move SignalHandler function pointer typedef.
Matti Hamalainen <ccr@tnsp.org>
parents: 4693
diff changeset
43
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
44 gint linuxthread_signal_number = 0;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
45
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
46 static void
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
47 signal_process_segv(void)
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
48 {
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
49 g_printerr(_("\nAudacious has caught signal 11 (SIGSEGV).\n\n"
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
50 "We apologize for the inconvenience, but Audacious has crashed.\n"
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
51 "This is a bug in the program, and should never happen under normal circumstances.\n"
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
52 "Your current configuration has been saved and should not be damaged.\n\n"
4431
6456eadfe0ca Updated bugtracker URL and made the sig11 handler tiny bit more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 4412
diff changeset
53 "You can help improve the quality of Audacious by filing a bug at http://bugzilla.atheme.org/\n"
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
54 "Please include the entire text of this message and a description of what you were doing when\n"
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
55 "this crash occured in order to quickly expedite the handling of your bug report:\n\n"));
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
56
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
57 g_printerr("Program version: Audacious %s (buildid: %s)\n\n", VERSION, svn_stamp);
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
58
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
59 #ifdef HAVE_EXECINFO_H
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
60 {
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
61 void *stack[20];
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
62 size_t size;
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
63 char **strings;
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
64 size_t i;
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
65
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
66 size = backtrace(stack, 20);
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
67 strings = backtrace_symbols(stack, size);
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
68
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
69 g_printerr("Stacktrace (%zd frames):\n", size);
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
70
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
71 for (i = 0; i < size; i++)
2785
182aa34ae6c4 [svn] - implement some audacious-remote functions.
yaz
parents: 2677
diff changeset
72 g_printerr(" %ld. %s\n", (long)i + 1, strings[i]);
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
73
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
74 g_free(strings);
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
75 }
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
76 #else
4431
6456eadfe0ca Updated bugtracker URL and made the sig11 handler tiny bit more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 4412
diff changeset
77 g_printerr(_("Stacktrace was unavailable. You might want to reproduce this "
6456eadfe0ca Updated bugtracker URL and made the sig11 handler tiny bit more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 4412
diff changeset
78 "problem while running Audacious under GDB to get a proper backtrace.\n"));
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
79 #endif
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
80
4830
901cd268f0ca Do NOT save the config if we are crashing. This is a *hideously* bad idea.
William Pitcock <nenolod@atheme.org>
parents: 4811
diff changeset
81 g_printerr(_("\nBugs can be reported at http://redmine.atheme.org/ against "
901cd268f0ca Do NOT save the config if we are crashing. This is a *hideously* bad idea.
William Pitcock <nenolod@atheme.org>
parents: 4811
diff changeset
82 "the Audlegacy or Audlegacy Plugins product.\n"));
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
83
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
84 g_critical("Received SIGSEGV -- Audacious has crashed.");
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
85
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
86 abort();
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
87 }
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
88
4693
463675303b6f Fix preprocessor logic.
William Pitcock <nenolod@atheme.org>
parents: 4692
diff changeset
89 #if (!defined(HAVE_SIGNALFD) || !defined(HAVE_SYS_SIGNALFD_H))
4690
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
90
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
91 static void *
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
92 signal_process_signals (void *data)
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
93 {
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
94 sigset_t waitset;
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
95 int sig;
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
96
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
97 sigemptyset(&waitset);
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
98 sigaddset(&waitset, SIGPIPE);
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
99 sigaddset(&waitset, SIGSEGV);
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
100 sigaddset(&waitset, SIGINT);
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
101 sigaddset(&waitset, SIGTERM);
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
102
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
103 while(1) {
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
104 sigwait(&waitset, &sig);
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
105
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
106 switch(sig){
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
107 case SIGPIPE:
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
108 /*
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
109 * do something.
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
110 */
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
111 break;
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
112
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
113 case SIGSEGV:
2661
f6c7271df7de [svn] - use execinfo.h to provide more useful information about crashes
nenolod
parents: 2638
diff changeset
114 signal_process_segv();
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
115 break;
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
116
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
117 case SIGINT:
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
118 g_print("Audacious has received SIGINT and is shutting down.\n");
4449
19e3f3c5fe7f introduce function aud_quit(), which is basically mainwin_quit_cb(), but
mf0102 <0102@gmx.at>
parents: 4431
diff changeset
119 aud_quit();
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
120 break;
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
121
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
122 case SIGTERM:
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
123 g_print("Audacious has received SIGTERM and is shutting down.\n");
4449
19e3f3c5fe7f introduce function aud_quit(), which is basically mainwin_quit_cb(), but
mf0102 <0102@gmx.at>
parents: 4431
diff changeset
124 aud_quit();
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
125 break;
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
126 }
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
127 }
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
128
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
129 return NULL; //dummy
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
130 }
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
131
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
132 /********************************************************************************/
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
133 /* for linuxthread */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
134 /********************************************************************************/
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
135
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
136 static void *
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
137 signal_process_signals_linuxthread (void *data)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
138 {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
139 while(1) {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
140 g_usleep(1000000);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
141
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
142 switch(linuxthread_signal_number){
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
143 case SIGPIPE:
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
144 /*
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
145 * do something.
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
146 */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
147 linuxthread_signal_number = 0;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
148 break;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
149
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
150 case SIGSEGV:
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
151 signal_process_segv();
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
152 break;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
153
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
154 case SIGINT:
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
155 g_print("Audacious has received SIGINT and is shutting down.\n");
4449
19e3f3c5fe7f introduce function aud_quit(), which is basically mainwin_quit_cb(), but
mf0102 <0102@gmx.at>
parents: 4431
diff changeset
156 aud_quit();
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
157 break;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
158
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
159 case SIGTERM:
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
160 g_print("Audacious has received SIGTERM and is shutting down.\n");
4449
19e3f3c5fe7f introduce function aud_quit(), which is basically mainwin_quit_cb(), but
mf0102 <0102@gmx.at>
parents: 4431
diff changeset
161 aud_quit();
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
162 break;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
163 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
164 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
165
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
166 return NULL; //dummy
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
167 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
168
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
169 static void
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
170 linuxthread_handler (gint signal_number)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
171 {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
172 /* note: cannot manipulate mutex from signal handler */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
173 linuxthread_signal_number = signal_number;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
174 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
175
4690
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
176 #else
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
177
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
178 #include <sys/signalfd.h>
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
179
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
180 static gpointer
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
181 signal_process_signals(gpointer data)
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
182 {
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
183 struct signalfd_siginfo d;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
184 sigset_t waitset;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
185 int sigfd;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
186
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
187 sigemptyset(&waitset);
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
188 sigaddset(&waitset, SIGPIPE);
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
189 sigaddset(&waitset, SIGSEGV);
4690
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
190 sigaddset(&waitset, SIGINT);
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
191 sigaddset(&waitset, SIGTERM);
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
192
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
193 sigfd = signalfd(-1, &waitset, 0);
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
194
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
195 while (read(sigfd, &d, sizeof(struct signalfd_siginfo)) > 0)
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
196 {
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
197 switch(d.ssi_signo)
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
198 {
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
199 case SIGPIPE:
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
200 /*
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
201 * do something.
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
202 */
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
203 break;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
204
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
205 case SIGSEGV:
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
206 signal_process_segv();
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
207 break;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
208
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
209 case SIGINT:
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
210 g_print("Audacious has received SIGINT and is shutting down.\n");
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
211 aud_quit();
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
212 break;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
213
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
214 case SIGTERM:
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
215 g_print("Audacious has received SIGTERM and is shutting down.\n");
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
216 aud_quit();
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
217 break;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
218 }
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
219 }
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
220
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
221 close(sigfd);
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
222
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
223 return NULL;
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
224 }
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
225
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
226 #endif
cd1e4d4aa0b9 Take advantage of signalfd if available.
William Pitcock <nenolod@atheme.org>
parents: 4492
diff changeset
227
4844
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
228 #if (!defined(HAVE_SIGNALFD) || !defined(HAVE_SYS_SIGNALFD_H))
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
229 static SignalHandler
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
230 signal_install_handler_full (gint signal_number,
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
231 SignalHandler handler,
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
232 gint *signals_to_block,
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
233 gsize n_signals)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
234 {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
235 struct sigaction action, old_action;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
236 gsize i;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
237
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
238 action.sa_handler = handler;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
239 action.sa_flags = SA_RESTART;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
240
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
241 sigemptyset (&action.sa_mask);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
242
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
243 for (i = 0; i < n_signals; i++)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
244 sigaddset (&action.sa_mask, signals_to_block[i]);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
245
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
246 if (sigaction (signal_number, &action, &old_action) == -1)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
247 {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
248 g_message ("Failed to install handler for signal %d", signal_number);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
249 return NULL;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
250 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
251
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
252 return old_action.sa_handler;
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
253 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
254
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
255 /*
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
256 * A version of signal() that works more reliably across different
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
257 * platforms. It:
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
258 * a. restarts interrupted system calls
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
259 * b. does not reset the handler
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
260 * c. blocks the same signal within the handler
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
261 *
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
262 * (adapted from Unix Network Programming Vol. 1)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
263 */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
264 static SignalHandler
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
265 signal_install_handler (gint signal_number,
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
266 SignalHandler handler)
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
267 {
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
268 return signal_install_handler_full (signal_number, handler, NULL, 0);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
269 }
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
270
4844
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
271 static gboolean
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
272 signal_check_for_broken_impl(void)
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
273 {
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
274 #ifdef _CS_GNU_LIBPTHREAD_VERSION
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
275 {
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
276 gchar str[1024];
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
277 confstr(_CS_GNU_LIBPTHREAD_VERSION, str, sizeof(str));
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
278
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
279 if (g_ascii_strncasecmp("linuxthreads", str, 12) == 0)
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
280 return TRUE;
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
281 }
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
282 #endif
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
283
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
284 return FALSE;
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
285 }
aed7b7a97932 Functions were declared that are only used in specific situations. Move a code block up a bit and #ifdef appropriately.
Tony Vroon <chainsaw@gentoo.org>
parents: 4834
diff changeset
286 #endif
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
287
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
288 /* sets up blocking signals for pthreads.
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
289 * linuxthreads sucks and needs this to make sigwait(2) work
2664
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
290 * correctly. --nenolod
2666
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
291 *
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
292 * correction -- this trick does not work on linuxthreads.
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
293 * going to keep it in it's own function though --nenolod
2664
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
294 */
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
295 static void
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
296 signal_initialize_blockers(void)
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
297 {
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
298 sigset_t blockset;
2486
113f75c7b0ce [svn] - make SIGTERM handler always work.
yaz
parents: 2373
diff changeset
299
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
300 sigemptyset(&blockset);
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
301 sigaddset(&blockset, SIGPIPE);
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
302 sigaddset(&blockset, SIGSEGV);
2629
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
303 sigaddset(&blockset, SIGINT);
021321cb5426 [svn] simplify and enhance signal handler:
yaz
parents: 2486
diff changeset
304 sigaddset(&blockset, SIGTERM);
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
305
2674
f3ee0b78150a [svn] - use pthread_sigmask(SIG_BLOCK, ...) instead of of SIG_SETMASK
nenolod
parents: 2666
diff changeset
306 if(pthread_sigmask(SIG_BLOCK, &blockset, NULL))
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
307 g_print("pthread_sigmask() failed.\n");
2664
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
308 }
1d9c5db3341d [svn] - handle sigwait(2) brokenness on linuxthreads
nenolod
parents: 2661
diff changeset
309
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
310 #ifdef USE_EGGSM
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
311 static void
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
312 signal_session_quit_cb(EggSMClient *client, gpointer user_data)
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
313 {
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
314 g_print("Session quit requested. Saving state and shutting down.\n");
4449
19e3f3c5fe7f introduce function aud_quit(), which is basically mainwin_quit_cb(), but
mf0102 <0102@gmx.at>
parents: 4431
diff changeset
315 aud_quit();
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
316 }
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
317
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
318 static void
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
319 signal_session_save_cb(EggSMClient *client, const char *state_dir, gpointer user_data)
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
320 {
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
321 g_print("Session save requested. Saving state.\n");
4412
180996fcf12a bmp_config_* -> aud_config_*
Matti Hamalainen <ccr@tnsp.org>
parents: 4345
diff changeset
322 aud_config_save();
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
323 }
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
324 #endif
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
325
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
326 void
2666
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
327 signal_handlers_init(void)
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
328 {
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
329 #ifdef USE_EGGSM
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
330 EggSMClient *client;
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
331
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
332 client = egg_sm_client_get ();
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
333 if (client != NULL)
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
334 {
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
335 egg_sm_client_set_mode (EGG_SM_CLIENT_MODE_NORMAL);
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
336 g_signal_connect (client, "quit",
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
337 G_CALLBACK (signal_session_quit_cb), NULL);
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
338 g_signal_connect (client, "save-state",
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
339 G_CALLBACK (signal_session_save_cb), NULL);
4834
38b491487bd8 renamed dbus symbol to audlegacy
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 4830
diff changeset
340
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
341 }
4492
55262ebeba2d Conditional support for SM (libeggsmclient).
Matti Hamalainen <ccr@tnsp.org>
parents: 4449
diff changeset
342 #endif
4315
c942eaef7bc6 Implement session management.
Ivan N. Zlatev <contact@i-nz.net>
parents: 4069
diff changeset
343
4693
463675303b6f Fix preprocessor logic.
William Pitcock <nenolod@atheme.org>
parents: 4692
diff changeset
344 #if (!defined(HAVE_SIGNALFD) || !defined(HAVE_SYS_SIGNALFD_H))
4692
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
345
2666
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
346 if (signal_check_for_broken_impl() != TRUE)
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
347 {
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
348 signal_initialize_blockers();
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
349 g_thread_create(signal_process_signals, NULL, FALSE, NULL);
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
350 }
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
351 else
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
352 {
2666
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
353 g_printerr(_("Your signaling implementation is broken.\n"
78a8b3095274 [svn] - do not use the signal handler at all on linuxthreads and hope for the best
nenolod
parents: 2665
diff changeset
354 "Expect unusable crash reports.\n"));
2677
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
355
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
356 /* install special handler which catches signals and forwards to the signal handling thread */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
357 signal_install_handler(SIGPIPE, linuxthread_handler);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
358 signal_install_handler(SIGSEGV, linuxthread_handler);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
359 signal_install_handler(SIGINT, linuxthread_handler);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
360 signal_install_handler(SIGTERM, linuxthread_handler);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
361
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
362 /* create handler thread */
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
363 g_thread_create(signal_process_signals_linuxthread, NULL, FALSE, NULL);
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
364
52785bdac597 [svn] - workaround for linuxthread's broken implementation of sigwait().
yaz
parents: 2674
diff changeset
365 }
4692
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
366
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
367 #else
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
368
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
369 signal_initialize_blockers();
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
370 g_thread_create(signal_process_signals, NULL, FALSE, NULL);
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
371
84f70d4b36e6 Fix compile when signalfd is not available entirely.
William Pitcock <nenolod@atheme.org>
parents: 4690
diff changeset
372 #endif
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
373 }