changeset 240:42e971738a37

Use centralized signal management
author Sebastien Decugis <sdecugis@nict.go.jp>
date Mon, 08 Mar 2010 17:34:42 +0900
parents aba4342b5916
children 84460aa8d77b
files extensions/dbg_monitor/dbg_monitor.c
diffstat 1 files changed, 15 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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();
"Welcome to our mercurial repository"