1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-10-28 04:46:17 +00:00

Resolver: Implement signal handler and catch TERM signal

This commit is contained in:
Alexander Barton 2010-05-21 23:53:48 +02:00
parent d4632a727f
commit 2d4ea28835

View File

@ -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 *