Module: ngircd.git Branch: master Commit: 2d4ea288353c2240c8d13e41c8da1557fc32168b URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=2d4ea...
Author: Alexander Barton alex@barton.de Date: Fri May 21 23:53:48 2010 +0200
Resolver: Implement signal handler and catch TERM signal
---
src/ngircd/resolve.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c index e64688e..295a559 100644 --- 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 *
ngircd-commits@lists.barton.de