repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 2d4ea288353c2240c8d13e41c8da1557fc32168b:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 2d4ea288353c2240c8d13e41c8da1557fc32168b
Author: Alexander Barton 
Date:   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
index e64688ec22e1c280c395282b9b7a3ef8d3154650..
index ..295a559f6f14a551c6f66cb89b3036e620511db3 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 *

-----END OF PAGE-----