# HG changeset patch # User Sebastien Decugis # Date 1268037282 -32400 # Node ID 42e971738a370406560de9660e8d0ee72b689c70 # Parent aba4342b591618df17bbe6554bf3e3bdf2063688 Use centralized signal management diff -r aba4342b5916 -r 42e971738a37 extensions/dbg_monitor/dbg_monitor.c --- a/extensions/dbg_monitor/dbg_monitor.c Mon Mar 08 15:06:49 2010 +0900 +++ b/extensions/dbg_monitor/dbg_monitor.c Mon Mar 08 17:34:42 2010 +0900 @@ -49,31 +49,13 @@ EXTENSION_ENTRY("dbg_monitor", monitor_main); -/* Function called on receipt of SIGUSR1 */ -static void got_sig(int signal) -{ - fd_log_debug("[dbg_monitor] Dumping extra information\n"); - CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_DICT, 0, NULL), /* continue */); - CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_CONFIG, 0, NULL), /* continue */); - CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_EXT, 0, NULL), /* continue */); -} /* Thread to display periodical debug information */ static pthread_t thr; static void * mn_thr(void * arg) { - sigset_t sig; int i = 0; - struct sigaction act; fd_log_threadname("Monitor thread"); - /* Catch signal SIGUSR1 */ - memset(&act, 0, sizeof(act)); - act.sa_handler = got_sig; - CHECK_SYS_DO( sigaction(MONITOR_SIGNAL, &act, NULL), /* conitnue */ ); - sigemptyset(&sig); - sigaddset(&sig, MONITOR_SIGNAL); - CHECK_POSIX_DO( pthread_sigmask(SIG_UNBLOCK, &sig, NULL), /* conitnue */ ); - /* Loop */ while (1) { #ifdef DEBUG @@ -94,13 +76,28 @@ return NULL; } +/* Function called on receipt of MONITOR_SIGNAL */ +static void got_sig(int signal) +{ + fd_log_debug("[dbg_monitor] Dumping extra information\n"); + CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_DICT, 0, NULL), /* continue */); + CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_CONFIG, 0, NULL), /* continue */); + CHECK_FCT_DO(fd_event_send(fd_g_config->cnf_main_ev, FDEV_DUMP_EXT, 0, NULL), /* continue */); +} + +/* Entry point */ static int monitor_main(char * conffile) { TRACE_ENTRY("%p", conffile); + + /* Catch signal SIGUSR1 */ + CHECK_FCT( fd_sig_register(MONITOR_SIGNAL, "dbg_monitor", got_sig)); + CHECK_POSIX( pthread_create( &thr, NULL, mn_thr, NULL ) ); return 0; } +/* Cleanup */ void fd_ext_fini(void) { TRACE_ENTRY();