From afe8467110649b303f6b59fd595bc5fea5b53910 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 19 Sep 2019 19:41:14 +0200 Subject: [PATCH] ntdll: Avoid server call when possible in NtSetContextThread() on ARM64. Signed-off-by: Alexandre Julliard --- 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 25ac7dac028..7abf389bbd3 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; }