H. Verbeet : server: Calling ResumeThread() on a terminated thread is valid .

Alexandre Julliard julliard at winehq.org
Wed Jul 23 07:09:47 CDT 2008


Module: wine
Branch: master
Commit: ff870e01322298c8b2f646531f0f8875fd8e4ebb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ff870e01322298c8b2f646531f0f8875fd8e4ebb

Author: H. Verbeet <hverbeet at gmail.com>
Date:   Tue Jul 22 23:54:39 2008 +0200

server: Calling ResumeThread() on a terminated thread is valid.

---

 dlls/kernel32/tests/thread.c |    8 ++++++++
 server/thread.c              |    3 +--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index d1ac617..5c3d99e 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -450,6 +450,7 @@ static VOID test_CreateThread_suspended(void)
 {
   HANDLE thread;
   DWORD threadId;
+  DWORD suspend_count;
   int error;
 
   thread = CreateThread(NULL,0,threadFunc2,NULL,
@@ -471,6 +472,13 @@ static VOID test_CreateThread_suspended(void)
   if(error!=WAIT_OBJECT_0) {
     TerminateThread(thread,1);
   }
+
+  suspend_count = SuspendThread(thread);
+  ok(suspend_count == -1, "SuspendThread returned %d, expected -1\n", suspend_count);
+
+  suspend_count = ResumeThread(thread);
+  ok(suspend_count == 0, "ResumeThread returned %d, expected 0\n", suspend_count);
+
   ok(CloseHandle(thread)!=0,"CloseHandle failed\n");
 }
 
diff --git a/server/thread.c b/server/thread.c
index 4929b4a..0c496db 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -1160,8 +1160,7 @@ DECL_HANDLER(resume_thread)
 
     if ((thread = get_thread_from_handle( req->handle, THREAD_SUSPEND_RESUME )))
     {
-        if (thread->state == TERMINATED) set_error( STATUS_ACCESS_DENIED );
-        else reply->count = resume_thread( thread );
+        reply->count = resume_thread( thread );
         release_object( thread );
     }
 }




More information about the wine-cvs mailing list