]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6211 thread priority in the apr for windows
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 13 Mar 2014 17:53:39 +0000 (22:53 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 13 Mar 2014 17:53:45 +0000 (22:53 +0500)
libs/apr/threadproc/win32/thread.c

index bb378559adf0402e2b379663ef6e5c8d51e68f19..280213f2a1105d0cb1cd78aeb73dddeb69e6a621 100644 (file)
@@ -87,6 +87,7 @@ APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new,
     apr_status_t stat;
        unsigned temp;
     HANDLE handle;
+    int priority = THREAD_PRIORITY_NORMAL;
 
     (*new) = (apr_thread_t *)apr_palloc(pool, sizeof(apr_thread_t));
 
@@ -103,6 +104,18 @@ APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new,
         return stat;
     }
 
+    if (attr && attr->priority && attr->priority > 0) {
+        if (attr->priority >= 99) {
+            priority = THREAD_PRIORITY_TIME_CRITICAL;
+        } else if (attr->priority >= 50) {
+            priority = THREAD_PRIORITY_ABOVE_NORMAL;
+        } else if (attr->priority >= 10) {
+            priority = THREAD_PRIORITY_NORMAL;
+        } else if (attr->priority >= 1) {
+            priority = THREAD_PRIORITY_LOWEST;
+        }
+    }
+
     /* Use 0 for Thread Stack Size, because that will default the stack to the
      * same size as the calling thread. 
      */
@@ -121,6 +134,11 @@ APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new,
         return apr_get_os_error();
     }
 #endif
+
+   if (priority) {
+       SetThreadPriority(handle, priority);
+   }
+
     if (attr && attr->detach) {
         CloseHandle(handle);
     }