Alexandre Julliard : ntdll: Avoid server call when possible in NtSetContextThread() on ARM64.
Module: wine Branch: master Commit: afe8467110649b303f6b59fd595bc5fea5b53910 URL: https://source.winehq.org/git/wine.git/?a=commit;h=afe8467110649b303f6b59fd5... Author: Alexandre Julliard <julliard(a)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(a)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; }
participants (1)
-
Alexandre Julliard