repo: ngircd action: commit revision: path_from: revision_from: 2d4ea288353c2240c8d13e41c8da1557fc32168b: path_to: revision_to:
commit 2d4ea288353c2240c8d13e41c8da1557fc32168b Author: Alexander BartonDate: Fri May 21 23:53:48 2010 +0200 Resolver: Implement signal handler and catch TERM signal diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c
--- a/src/ngircd/resolve.c
+++ b/src/ngircd/resolve.c
@@ -42,6 +42,7 @@
#include "io.h"
+static void Init_Subprocess PARAMS(( void ));
static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
static void Do_ResolveName PARAMS(( const char *Host, int w_fd ));
@@ -69,7 +70,7 @@ Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
return true;
} else if( pid == 0 ) {
/* Sub process */
- Log_Init_Resolver();
+ Init_Subprocess();
Do_ResolveAddr( Addr, identsock, pipefd[1]);
Log_Exit_Resolver( );
exit(0);
@@ -98,7 +99,7 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
return true;
} else if( pid == 0 ) {
/* Sub process */
- Log_Init_Resolver();
+ Init_Subprocess();
Do_ResolveName(Host, pipefd[1]);
Log_Exit_Resolver( );
exit(0);
@@ -107,6 +108,33 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
} /* Resolve_Name */
+/**
+ * Signal handler for the forked resolver subprocess.
+ */
+static void
+Signal_Handler(int Signal)
+{
+ switch(Signal) {
+ case SIGTERM:
+#ifdef DEBUG
+ Log_Resolver(LOG_DEBUG, "Resolver: Got TERM signal, exiting.");
+#endif
+ exit(1);
+ }
+}
+
+
+/**
+ * Initialize forked resolver subprocess.
+ */
+static void
+Init_Subprocess(void)
+{
+ signal(SIGTERM, Signal_Handler);
+ Log_Init_Resolver();
+}
+
+
#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
#if !defined(WANT_IPV6) && defined(h_errno)
static char *
-----END OF PAGE-----