Module: wine Branch: master Commit: bac0387d297ea547e69784d5372acf0586b5cc31 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bac0387d297ea547e69784d537...
Author: Dmitry Timoshkov dmitry@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 )