[PATCH] ntdll: Have QueueUserAPC() set expected error on terminating.
David Koolhoven
david at koolhoven-home.net
Sat Feb 20 16:05:31 CST 2021
QueueUserAPC() should set GetLastError() to return
ERROR_GEN_FAILURE in the unlikely but inevitable
circumstance it's called on a thread set to
STATUS_THREAD_IS_TERMINATING. It currenly returns
ERROR_ACCESS_DENIED which is unexpected behavior.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50704
Signed-off-by: David Koolhoven <david at koolhoven-home.net>
---
dlls/ntdll/error.c | 2 +-
dlls/ntdll/make_errors | 2 +-
dlls/ntdll/tests/error.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/error.c b/dlls/ntdll/error.c
index fb630fa9864..3b6b2ecdebe 100644
--- a/dlls/ntdll/error.c
+++ b/dlls/ntdll/error.c
@@ -475,7 +475,7 @@ static const DWORD error_map[1579] =
ERROR_INVALID_PARAMETER, /* c0000048 (STATUS_PORT_ALREADY_SET) */
ERROR_INVALID_PARAMETER, /* c0000049 (STATUS_SECTION_NOT_IMAGE) */
ERROR_SIGNAL_REFUSED, /* c000004a (STATUS_SUSPEND_COUNT_EXCEEDED) */
- ERROR_ACCESS_DENIED, /* c000004b (STATUS_THREAD_IS_TERMINATING) */
+ ERROR_GEN_FAILURE, /* c000004b (STATUS_THREAD_IS_TERMINATING) */
ERROR_INVALID_PARAMETER, /* c000004c (STATUS_BAD_WORKING_SET_LIMIT) */
ERROR_INVALID_PARAMETER, /* c000004d (STATUS_INCOMPATIBLE_FILE_MAP) */
ERROR_INVALID_PARAMETER, /* c000004e (STATUS_SECTION_PROTECTION) */
diff --git a/dlls/ntdll/make_errors b/dlls/ntdll/make_errors
index bedce57fe7a..b7a2a346e5c 100755
--- a/dlls/ntdll/make_errors
+++ b/dlls/ntdll/make_errors
@@ -307,7 +307,7 @@ my %error_map = qw(
STATUS_PORT_ALREADY_SET ERROR_INVALID_PARAMETER
STATUS_SECTION_NOT_IMAGE ERROR_INVALID_PARAMETER
STATUS_SUSPEND_COUNT_EXCEEDED ERROR_SIGNAL_REFUSED
- STATUS_THREAD_IS_TERMINATING ERROR_ACCESS_DENIED
+ STATUS_THREAD_IS_TERMINATING ERROR_GEN_FAILURE
STATUS_BAD_WORKING_SET_LIMIT ERROR_INVALID_PARAMETER
STATUS_INCOMPATIBLE_FILE_MAP ERROR_INVALID_PARAMETER
STATUS_SECTION_PROTECTION ERROR_INVALID_PARAMETER
diff --git a/dlls/ntdll/tests/error.c b/dlls/ntdll/tests/error.c
index 05ba22223e3..d9ef1791848 100644
--- a/dlls/ntdll/tests/error.c
+++ b/dlls/ntdll/tests/error.c
@@ -268,7 +268,7 @@ static void run_error_tests(void)
cmp2(STATUS_THREAD_WAS_SUSPENDED, ERROR_THREAD_WAS_SUSPENDED);
cmp2(STATUS_TOO_MANY_THREADS, ERROR_TOO_MANY_THREADS);
cmp2(STATUS_THREAD_NOT_IN_PROCESS, ERROR_THREAD_NOT_IN_PROCESS);
- cmp(STATUS_THREAD_IS_TERMINATING, ERROR_ACCESS_DENIED);
+ cmp(STATUS_THREAD_IS_TERMINATING, ERROR_GEN_FAILURE);
cmp(STATUS_PROCESS_IS_TERMINATING, ERROR_ACCESS_DENIED);
cmp2(STATUS_SYSTEM_PROCESS_TERMINATED, ERROR_SYSTEM_PROCESS_TERMINATED);
cmp(STATUS_INVALID_LOCK_SEQUENCE, ERROR_ACCESS_DENIED);
--
2.19.1
More information about the wine-devel
mailing list