server: Only commit SetThreadPriority if new priority is correct (try 6)

Matt Jones mattj at google.com
Tue Jul 24 15:26:10 CDT 2007


Updated for try 6 version of kernel32 test
-------------- next part --------------
From 92ce5dad23202526069acae0c50d22fd23e437e2 Mon Sep 17 00:00:00 2001
From: Matt Jones <mattj at google.com>
Date: Tue, 24 Jul 2007 13:23:56 -0700
Subject: [PATCH] server: Only set the thread priority if the new priority is valid
Set the correct error if the new priority is invalid
Remove todo_wine from test cases this fixes
---
 dlls/kernel32/tests/thread.c |   24 ++++++++++--------------
 server/thread.c              |   21 ++++++++++++++++++++-
 2 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 6b22c0c..abb7122 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -594,25 +594,21 @@ #endif
    SetLastError(0xdeadbeef);
    result = SetThreadPriority(curthread,min_priority-1);
 
-   todo_wine {
-     ok(result == FALSE, "SetThreadPriority passed with a bad argument\n");
-     ok(GetLastError() == ERROR_INVALID_PARAMETER,
-        "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
-     ok(GetThreadPriority(curthread)==min_priority,
-        "GetThreadPriority didn't return min_priority\n");
-   }
+   ok(result == FALSE, "SetThreadPriority passed with a bad argument\n");
+   ok(GetLastError() == ERROR_INVALID_PARAMETER,
+      "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
+   ok(GetThreadPriority(curthread)==min_priority,
+      "GetThreadPriority didn't return min_priority\n");
 
    SetThreadPriority(curthread,max_priority);
    SetLastError(0xdeadbeef);
    result = SetThreadPriority(curthread,max_priority+1);
 
-   todo_wine {
-     ok(result == FALSE, "SetThreadPriority passed with a bad argument\n");
-     ok(GetLastError() == ERROR_INVALID_PARAMETER,
-        "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
-     ok(GetThreadPriority(curthread)==max_priority,
-        "GetThreadPriority didn't return max_priority\n");
-   }
+   ok(result == FALSE, "SetThreadPriority passed with a bad argument\n");
+   ok(GetLastError() == ERROR_INVALID_PARAMETER,
+      "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER (87)\n", GetLastError());
+   ok(GetThreadPriority(curthread)==max_priority,
+      "GetThreadPriority didn't return max_priority\n");
 
 
 /* Check thread priority boost */
diff --git a/server/thread.c b/server/thread.c
index 62d50b5..b798ec5 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -383,12 +383,31 @@ struct thread *get_thread_from_pid( int 
     return NULL;
 }
 
+#define THREAD_PRIORITY_REALTIME_HIGHEST 6
+#define THREAD_PRIORITY_REALTIME_LOWEST -7
+
 /* set all information about a thread */
 static void set_thread_info( struct thread *thread,
                              const struct set_thread_info_request *req )
 {
     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 == THREAD_PRIORITY_IDLE) &&
+            (req->priority <= max ||
+             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->affinity != 1) set_error( STATUS_INVALID_PARAMETER );
-- 
1.4.1


More information about the wine-patches mailing list