Dmitry Timoshkov : server: Fail to set process affinity mask if the process is terminating.
Module: wine Branch: master Commit: bac0387d297ea547e69784d5372acf0586b5cc31 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bac0387d297ea547e69784d537... Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Mon May 6 15:40:34 2013 +0900 server: Fail to set process affinity mask if the process is terminating. --- dlls/kernel32/tests/loader.c | 3 +-- server/process.c | 6 ++++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index e4176b5..a45235f 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -1958,7 +1958,7 @@ todo_wine /* Checking process state without waiting for process termination * leads to different results due to a race condition. */ - ret = WaitForSingleObject(pi.hProcess, 100); + ret = WaitForSingleObject(pi.hProcess, 1000); ok(ret == WAIT_OBJECT_0, "WaitForSingleObject failed: %x\n", ret); memset(&pbi, 0, sizeof(pbi)); @@ -1967,7 +1967,6 @@ todo_wine ok(pbi.ExitStatus == 198, "expected 198, got %lu\n", pbi.ExitStatus); affinity = 1; ret = pNtSetInformationProcess(pi.hProcess, ProcessAffinityMask, &affinity, sizeof(affinity)); -todo_wine ok(ret == STATUS_PROCESS_IS_TERMINATING, "expected STATUS_PROCESS_IS_TERMINATING, got %#x\n", ret); SetLastError(0xdeadbeef); diff --git a/server/process.c b/server/process.c index 89c08dc..61d9d17 100644 --- a/server/process.c +++ b/server/process.c @@ -1122,6 +1122,12 @@ static void set_process_affinity( struct process *process, affinity_t affinity ) { struct thread *thread; + if (!process->running_threads) + { + set_error( STATUS_PROCESS_IS_TERMINATING ); + return; + } + process->affinity = affinity; LIST_FOR_EACH_ENTRY( thread, &process->thread_list, struct thread, proc_entry )
participants (1)
-
Alexandre Julliard