Remove extra semicolon in my definition of setpriority()
[tinc] / src / tincd.c
index 257f9e4..da3c33f 100644 (file)
@@ -484,6 +484,15 @@ static bool drop_privs() {
        return true;
 }
 
+#ifdef HAVE_MINGW
+# define setpriority(level) SetPriorityClass(GetCurrentProcess(), level)
+#else
+# define NORMAL_PRIORITY_CLASS 0
+# define BELOW_NORMAL_PRIORITY_CLASS 10
+# define HIGH_PRIORITY_CLASS -10
+# define setpriority(level) nice(level)
+#endif
+
 int main(int argc, char **argv)
 {
        program_name = argv[0];
@@ -580,14 +589,31 @@ int main2(int argc, char **argv)
        if(!setup_network())
                goto end;
 
-       /* drop privileges */
-       if (!drop_privs())
-               goto end;
-
        /* Initiate all outgoing connections. */
 
        try_outgoing_connections();
 
+       /* Change process priority */
+
+        char *priority = 0;
+
+        if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
+                if(!strcasecmp(priority, "Normal"))
+                        setpriority(NORMAL_PRIORITY_CLASS);
+                else if(!strcasecmp(priority, "Low"))
+                        setpriority(BELOW_NORMAL_PRIORITY_CLASS);
+                else if(!strcasecmp(priority, "High"))
+                        setpriority(HIGH_PRIORITY_CLASS);
+                else {
+                        logger(LOG_ERR, _("Invalid priority `%s`!"), priority);
+                        goto end;
+                }
+        }
+
+       /* drop privileges */
+       if (!drop_privs())
+               goto end;
+
        /* Start main loop. It only exits when tinc is killed. */
 
        status = main_loop();