Move initialization of char *priority up to prevent freeing an uninitialized pointer.
[tinc] / src / tincd.c
index d1dcf84..c5f4c10 100644 (file)
@@ -504,7 +504,7 @@ static bool drop_privs() {
 }
 
 #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
@@ -523,7 +523,7 @@ int main(int argc, char **argv) {
        if(show_version) {
                printf("%s version %s (built %s %s, protocol %d)\n", PACKAGE,
                           VERSION, __DATE__, __TIME__, PROT_CURRENT);
-               printf("Copyright (C) 1998-2010 Ivo Timmermans, Guus Sliepen and others.\n"
+               printf("Copyright (C) 1998-2011 Ivo Timmermans, Guus Sliepen and others.\n"
                                "See the AUTHORS file for a complete list.\n\n"
                                "tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
                                "and you are welcome to redistribute it under certain conditions;\n"
@@ -586,6 +586,7 @@ int main2(int argc, char **argv) {
        InitializeCriticalSection(&mutex);
        EnterCriticalSection(&mutex);
 #endif
+        char *priority = NULL;
 
        if(!detach())
                return 1;
@@ -612,8 +613,6 @@ int main2(int argc, char **argv) {
 
        /* Change process priority */
 
-        char *priority = 0;
-
         if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
                 if(!strcasecmp(priority, "Normal")) {
                         if (setpriority(NORMAL_PRIORITY_CLASS) != 0) {
@@ -650,7 +649,7 @@ int main2(int argc, char **argv) {
        /* Shutdown properly. */
 
        ifdebug(CONNECTIONS)
-               dump_device_stats();
+               devops.dump_stats();
 
        close_network_connections();
 
@@ -661,6 +660,8 @@ end:
        remove_pid(pidfilename);
 #endif
 
+       free(priority);
+
        EVP_cleanup();
        ENGINE_cleanup();
        CRYPTO_cleanup_all_ex_data();
@@ -668,6 +669,7 @@ end:
        ERR_free_strings();
 
        exit_configuration(&config_tree);
+       list_free(cmdline_conf);
        free_names();
 
        return status;