Commit 67637420 authored by Matt Jones's avatar Matt Jones Committed by Alexandre Julliard

server: Only commit SetThreadPriority if new priority is correct.

parent f204ed1d
...@@ -594,25 +594,21 @@ static VOID test_thread_priority(void) ...@@ -594,25 +594,21 @@ static VOID test_thread_priority(void)
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
rc = SetThreadPriority(curthread,min_priority-1); rc = SetThreadPriority(curthread,min_priority-1);
todo_wine { ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n");
ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER,
ok(GetLastError() == ERROR_INVALID_PARAMETER, "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
"SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError()); ok(GetThreadPriority(curthread)==min_priority,
ok(GetThreadPriority(curthread)==min_priority, "GetThreadPriority didn't return min_priority\n");
"GetThreadPriority didn't return min_priority\n");
}
SetThreadPriority(curthread,max_priority); SetThreadPriority(curthread,max_priority);
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
rc = SetThreadPriority(curthread,max_priority+1); rc = SetThreadPriority(curthread,max_priority+1);
todo_wine { ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n");
ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER,
ok(GetLastError() == ERROR_INVALID_PARAMETER, "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
"SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError()); ok(GetThreadPriority(curthread)==max_priority,
ok(GetThreadPriority(curthread)==max_priority, "GetThreadPriority didn't return max_priority\n");
"GetThreadPriority didn't return max_priority\n");
}
/* Check thread priority boost */ /* Check thread priority boost */
if (!pGetThreadPriorityBoost || !pSetThreadPriorityBoost) if (!pGetThreadPriorityBoost || !pSetThreadPriorityBoost)
......
...@@ -383,12 +383,29 @@ struct thread *get_thread_from_pid( int pid ) ...@@ -383,12 +383,29 @@ struct thread *get_thread_from_pid( int pid )
return NULL; return NULL;
} }
#define THREAD_PRIORITY_REALTIME_HIGHEST 6
#define THREAD_PRIORITY_REALTIME_LOWEST -7
/* set all information about a thread */ /* set all information about a thread */
static void set_thread_info( struct thread *thread, static void set_thread_info( struct thread *thread,
const struct set_thread_info_request *req ) const struct set_thread_info_request *req )
{ {
if (req->mask & SET_THREAD_INFO_PRIORITY) if (req->mask & SET_THREAD_INFO_PRIORITY)
thread->priority = req->priority; {
int max = THREAD_PRIORITY_HIGHEST;
int min = THREAD_PRIORITY_LOWEST;
if (thread->process->priority == PROCESS_PRIOCLASS_REALTIME)
{
max = THREAD_PRIORITY_REALTIME_HIGHEST;
min = THREAD_PRIORITY_REALTIME_LOWEST;
}
if ((req->priority >= min && req->priority <= max) ||
req->priority == THREAD_PRIORITY_IDLE ||
req->priority == THREAD_PRIORITY_TIME_CRITICAL)
thread->priority = req->priority;
else
set_error( STATUS_INVALID_PARAMETER );
}
if (req->mask & SET_THREAD_INFO_AFFINITY) if (req->mask & SET_THREAD_INFO_AFFINITY)
{ {
if (req->affinity != 1) set_error( STATUS_INVALID_PARAMETER ); if (req->affinity != 1) set_error( STATUS_INVALID_PARAMETER );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment