Alexandre Julliard : server: Fix the status code for get/ set_thread_context on a terminated thread.

Alexandre Julliard julliard at winehq.org
Fri May 6 13:43:56 CDT 2011


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May  6 13:06:52 2011 +0200

server: Fix the status code for get/set_thread_context on a terminated thread.

---

 dlls/kernel32/tests/thread.c |   16 ++++++++++++++++
 server/thread.c              |    4 ++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 25b55ac..8376575 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -955,6 +955,22 @@ static void test_SetThreadContext(void)
 
     WaitForSingleObject( thread, INFINITE );
     ok( test_value == 20, "test_value %d instead of 20\n", test_value );
+
+    ctx.ContextFlags = CONTEXT_FULL;
+    SetLastError(0xdeadbeef);
+    ret = GetThreadContext( thread, &ctx );
+    ok( !ret, "GetThreadContext succeeded\n" );
+    ok( GetLastError() == ERROR_GEN_FAILURE || broken(GetLastError() == ERROR_INVALID_HANDLE), /* win2k */
+        "wrong error %u\n", GetLastError() );
+
+    SetLastError(0xdeadbeef);
+    ret = SetThreadContext( thread, &ctx );
+    ok( !ret, "SetThreadContext succeeded\n" );
+    ok( GetLastError() == ERROR_GEN_FAILURE || GetLastError() == ERROR_ACCESS_DENIED ||
+        broken(GetLastError() == ERROR_INVALID_HANDLE), /* win2k */
+        "wrong error %u\n", GetLastError() );
+
+    CloseHandle( thread );
 }
 
 #endif  /* __i386__ */
diff --git a/server/thread.c b/server/thread.c
index 4388847..d0fdc30 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -1493,7 +1493,7 @@ DECL_HANDLER(get_thread_context)
                 suspend_thread( thread );
             }
         }
-        else set_error( STATUS_ACCESS_DENIED );
+        else set_error( STATUS_UNSUCCESSFUL );
     }
     else if ((context = set_reply_data_size( sizeof(context_t) )))
     {
@@ -1535,7 +1535,7 @@ DECL_HANDLER(set_thread_context)
                 suspend_thread( thread );
             }
         }
-        else set_error( STATUS_ACCESS_DENIED );
+        else set_error( STATUS_UNSUCCESSFUL );
     }
     else if (context->cpu == thread->process->cpu)
     {




More information about the wine-cvs mailing list