From: Alexander Barton Date: Fri, 21 May 2010 21:53:48 +0000 (+0200) Subject: Resolver: Implement signal handler and catch TERM signal X-Git-Tag: rel-17-rc1~80 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=commitdiff_plain;h=2d4ea288353c2240c8d13e41c8da1557fc32168b Resolver: Implement signal handler and catch TERM signal --- diff --git a/src/ngircd/resolve.c b/src/ngircd/resolve.c index e64688ec..295a559f 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 *