Don't call exit_control() if we didn't do init_control().
[tinc] / src / tincd.c
index 8497149..9d2b03b 100644 (file)
@@ -64,7 +64,7 @@
 #include "xalloc.h"
 
 /* The name this program was run with. */
-static char *program_name = NULL;
+char *program_name = NULL;
 
 /* If nonzero, display usage information and exit. */
 static bool show_help = false;
@@ -92,7 +92,7 @@ char *logfilename = NULL;                     /* log file location */
 char *controlcookiename = NULL;
 char **g_argv;                                 /* a copy of the cmdline arguments */
 
-static int status;
+static int status = 1;
 
 static struct option const long_options[] = {
        {"config", required_argument, NULL, 'c'},
@@ -339,7 +339,7 @@ static bool drop_privs(void) {
 }
 
 #ifdef HAVE_MINGW
-# define setpriority(level) SetPriorityClass(GetCurrentProcess(), (level))
+# define setpriority(level) !SetPriorityClass(GetCurrentProcess(), (level))
 #else
 # define NORMAL_PRIORITY_CLASS 0
 # define BELOW_NORMAL_PRIORITY_CLASS 10
@@ -434,10 +434,10 @@ int main2(int argc, char **argv) {
        /* Setup sockets and open device. */
 
        if(!setup_network())
-               goto end;
+               goto end_nonet;
 
        if(!init_control())
-               return 1;
+               goto end_nonet;
 
        /* Initiate all outgoing connections. */
 
@@ -488,10 +488,11 @@ int main2(int argc, char **argv) {
        close_network_connections();
 
 end:
-       logger(LOG_NOTICE, "Terminating");
-
        exit_control();
 
+end_nonet:
+       logger(LOG_NOTICE, "Terminating");
+
        crypto_exit();
 
        exit_configuration(&config_tree);