Module: wine Branch: master Commit: afe8467110649b303f6b59fd595bc5fea5b53910 URL: https://source.winehq.org/git/wine.git/?a=commit;h=afe8467110649b303f6b59fd5...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Sep 19 19:41:14 2019 +0200
ntdll: Avoid server call when possible in NtSetContextThread() on ARM64.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/signal_arm64.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 25ac7dac02..7abf389bbd 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -435,12 +435,18 @@ NTSTATUS context_from_server( CONTEXT *to, const context_t *from ) */ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context ) { - NTSTATUS ret; - BOOL self; - context_t server_context; + NTSTATUS ret = STATUS_SUCCESS; + BOOL self = (handle == GetCurrentThread());
- context_to_server( &server_context, context ); - ret = set_thread_context( handle, &server_context, &self ); + if (self && (context->ContextFlags & (CONTEXT_DEBUG_REGISTERS & ~CONTEXT_ARM64))) + self = FALSE; + + if (!self) + { + context_t server_context; + context_to_server( &server_context, context ); + ret = set_thread_context( handle, &server_context, &self ); + } if (self && ret == STATUS_SUCCESS) set_cpu_context( context ); return ret; }