comparison src/audlegacy/signals.c @ 4834:38b491487bd8

renamed dbus symbol to audlegacy
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Thu, 21 May 2009 19:17:02 +0900
parents 901cd268f0ca
children aed7b7a97932
comparison
equal deleted inserted replaced
4833:34d54dc5576d 4834:38b491487bd8
94 sigset_t waitset; 94 sigset_t waitset;
95 int sig; 95 int sig;
96 96
97 sigemptyset(&waitset); 97 sigemptyset(&waitset);
98 sigaddset(&waitset, SIGPIPE); 98 sigaddset(&waitset, SIGPIPE);
99 sigaddset(&waitset, SIGSEGV); 99 sigaddset(&waitset, SIGSEGV);
100 sigaddset(&waitset, SIGINT); 100 sigaddset(&waitset, SIGINT);
101 sigaddset(&waitset, SIGTERM); 101 sigaddset(&waitset, SIGTERM);
102 102
103 while(1) { 103 while(1) {
104 sigwait(&waitset, &sig); 104 sigwait(&waitset, &sig);
184 sigset_t waitset; 184 sigset_t waitset;
185 int sigfd; 185 int sigfd;
186 186
187 sigemptyset(&waitset); 187 sigemptyset(&waitset);
188 sigaddset(&waitset, SIGPIPE); 188 sigaddset(&waitset, SIGPIPE);
189 sigaddset(&waitset, SIGSEGV); 189 sigaddset(&waitset, SIGSEGV);
190 sigaddset(&waitset, SIGINT); 190 sigaddset(&waitset, SIGINT);
191 sigaddset(&waitset, SIGTERM); 191 sigaddset(&waitset, SIGTERM);
192 192
193 sigfd = signalfd(-1, &waitset, 0); 193 sigfd = signalfd(-1, &waitset, 0);
194 194
249 } 249 }
250 250
251 return old_action.sa_handler; 251 return old_action.sa_handler;
252 } 252 }
253 253
254 /* 254 /*
255 * A version of signal() that works more reliably across different 255 * A version of signal() that works more reliably across different
256 * platforms. It: 256 * platforms. It:
257 * a. restarts interrupted system calls 257 * a. restarts interrupted system calls
258 * b. does not reset the handler 258 * b. does not reset the handler
259 * c. blocks the same signal within the handler 259 * c. blocks the same signal within the handler
260 * 260 *
261 * (adapted from Unix Network Programming Vol. 1) 261 * (adapted from Unix Network Programming Vol. 1)
266 { 266 {
267 return signal_install_handler_full (signal_number, handler, NULL, 0); 267 return signal_install_handler_full (signal_number, handler, NULL, 0);
268 } 268 }
269 269
270 270
271 /* sets up blocking signals for pthreads. 271 /* sets up blocking signals for pthreads.
272 * linuxthreads sucks and needs this to make sigwait(2) work 272 * linuxthreads sucks and needs this to make sigwait(2) work
273 * correctly. --nenolod 273 * correctly. --nenolod
274 * 274 *
275 * correction -- this trick does not work on linuxthreads. 275 * correction -- this trick does not work on linuxthreads.
276 * going to keep it in it's own function though --nenolod 276 * going to keep it in it's own function though --nenolod
277 */ 277 */
280 { 280 {
281 sigset_t blockset; 281 sigset_t blockset;
282 282
283 sigemptyset(&blockset); 283 sigemptyset(&blockset);
284 sigaddset(&blockset, SIGPIPE); 284 sigaddset(&blockset, SIGPIPE);
285 sigaddset(&blockset, SIGSEGV); 285 sigaddset(&blockset, SIGSEGV);
286 sigaddset(&blockset, SIGINT); 286 sigaddset(&blockset, SIGINT);
287 sigaddset(&blockset, SIGTERM); 287 sigaddset(&blockset, SIGTERM);
288 288
289 if(pthread_sigmask(SIG_BLOCK, &blockset, NULL)) 289 if(pthread_sigmask(SIG_BLOCK, &blockset, NULL))
290 g_print("pthread_sigmask() failed.\n"); 290 g_print("pthread_sigmask() failed.\n");
291 } 291 }
292 292
293 static gboolean 293 static gboolean
294 signal_check_for_broken_impl(void) 294 signal_check_for_broken_impl(void)
295 { 295 {
308 308
309 #ifdef USE_EGGSM 309 #ifdef USE_EGGSM
310 static void 310 static void
311 signal_session_quit_cb(EggSMClient *client, gpointer user_data) 311 signal_session_quit_cb(EggSMClient *client, gpointer user_data)
312 { 312 {
313 g_print("Session quit requested. Saving state and shutting down.\n"); 313 g_print("Session quit requested. Saving state and shutting down.\n");
314 aud_quit(); 314 aud_quit();
315 } 315 }
316 316
317 static void 317 static void
318 signal_session_save_cb(EggSMClient *client, const char *state_dir, gpointer user_data) 318 signal_session_save_cb(EggSMClient *client, const char *state_dir, gpointer user_data)
319 { 319 {
320 g_print("Session save requested. Saving state.\n"); 320 g_print("Session save requested. Saving state.\n");
321 aud_config_save(); 321 aud_config_save();
322 } 322 }
323 #endif 323 #endif
324 324
325 void 325 void
326 signal_handlers_init(void) 326 signal_handlers_init(void)
327 { 327 {
328 #ifdef USE_EGGSM 328 #ifdef USE_EGGSM
329 EggSMClient *client; 329 EggSMClient *client;
330 330
331 client = egg_sm_client_get (); 331 client = egg_sm_client_get ();
332 if (client != NULL) 332 if (client != NULL)
333 { 333 {
334 egg_sm_client_set_mode (EGG_SM_CLIENT_MODE_NORMAL); 334 egg_sm_client_set_mode (EGG_SM_CLIENT_MODE_NORMAL);
335 g_signal_connect (client, "quit", 335 g_signal_connect (client, "quit",
336 G_CALLBACK (signal_session_quit_cb), NULL); 336 G_CALLBACK (signal_session_quit_cb), NULL);
337 g_signal_connect (client, "save-state", 337 g_signal_connect (client, "save-state",
338 G_CALLBACK (signal_session_save_cb), NULL); 338 G_CALLBACK (signal_session_save_cb), NULL);
339 339
340 } 340 }
341 #endif 341 #endif
342 342
343 #if (!defined(HAVE_SIGNALFD) || !defined(HAVE_SYS_SIGNALFD_H)) 343 #if (!defined(HAVE_SIGNALFD) || !defined(HAVE_SYS_SIGNALFD_H))
344 344