Alexandre Julliard : ntdll: Avoid server call when possible in NtSetContextThread() on ARM64.

Alexandre Julliard julliard at winehq.org
Thu Sep 19 16:35:18 CDT 2019


Module: wine
Branch: master
Commit: afe8467110649b303f6b59fd595bc5fea5b53910
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=afe8467110649b303f6b59fd595bc5fea5b53910

Author: Alexandre Julliard <julliard at 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 at 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;
 }




More information about the wine-cvs mailing list