From 47a7ef557aa1bb97dde169d2fec0279dc66ff16e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 13 Mar 2014 22:53:39 +0500 Subject: [PATCH] FS-6211 thread priority in the apr for windows --- libs/apr/threadproc/win32/thread.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libs/apr/threadproc/win32/thread.c b/libs/apr/threadproc/win32/thread.c index bb378559ad..280213f2a1 100644 --- a/libs/apr/threadproc/win32/thread.c +++ b/libs/apr/threadproc/win32/thread.c @@ -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); }