Clean up child processes from proxy type exec.
[tinc] / src / net.c
index 0b43d5a..baf576d 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -32,7 +32,6 @@
 #include "names.h"
 #include "net.h"
 #include "netutl.h"
-#include "process.h"
 #include "protocol.h"
 #include "subnet.h"
 #include "xalloc.h"
@@ -130,6 +129,12 @@ void terminate_connection(connection_t *c, bool report) {
 
        if(outgoing)
                do_outgoing_connection(outgoing);
+
+#ifndef HAVE_MINGW
+       /* Clean up dead proxy processes */
+
+       while(waitpid(-1, NULL, WNOHANG) > 0);
+#endif
 }
 
 /*
@@ -298,7 +303,8 @@ static void sigterm_handler(void *data) {
 static void sighup_handler(void *data) {
        logger(DEBUG_ALWAYS, LOG_NOTICE, "Got %s signal", strsignal(((signal_t *)data)->signum));
        reopenlogger();
-       reload_configuration();
+       if(reload_configuration())
+               exit(1);
 }
 
 static void sigalrm_handler(void *data) {
@@ -316,8 +322,7 @@ int reload_configuration(void) {
        init_configuration(&config_tree);
 
        if(!read_server_config()) {
-               logger(DEBUG_ALWAYS, LOG_ERR, "Unable to reread configuration file, exitting.");
-               event_exit();
+               logger(DEBUG_ALWAYS, LOG_ERR, "Unable to reread configuration file.");
                return EINVAL;
        }