Alexandre Julliard : ntdll: Use NtContinue() to restore context after an exception.

Alexandre Julliard julliard at winehq.org
Mon Jun 8 15:19:54 CDT 2020


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Sat Jun  6 15:17:07 2020 +0200

ntdll: Use NtContinue() to restore context after an exception.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/signal_arm.c     | 4 ++--
 dlls/ntdll/signal_arm64.c   | 4 ++--
 dlls/ntdll/signal_i386.c    | 7 +++----
 dlls/ntdll/signal_powerpc.c | 4 ++--
 dlls/ntdll/signal_x86_64.c  | 4 ++--
 5 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c
index 291536ecb8..101912f7ec 100644
--- a/dlls/ntdll/signal_arm.c
+++ b/dlls/ntdll/signal_arm.c
@@ -528,10 +528,10 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte
     }
 
     if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if ((status = call_stack_handlers( rec, context )) == STATUS_SUCCESS)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if (status != STATUS_UNHANDLED_EXCEPTION) RtlRaiseStatus( status );
     return NtRaiseException( rec, context, FALSE );
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index 4abcee5296..334c217b94 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -783,10 +783,10 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte
     }
 
     if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if ((status = call_function_handlers( rec, context )) == STATUS_SUCCESS)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if (status != STATUS_UNHANDLED_EXCEPTION) RtlRaiseStatus( status );
     return NtRaiseException( rec, context, FALSE );
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index ccdc8ec7f3..568fa34f18 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -757,10 +757,10 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte
     if (rec->ExceptionCode == EXCEPTION_BREAKPOINT) context->Eip--;
 
     if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if ((status = call_stack_handlers( rec, context )) == STATUS_SUCCESS)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if (status != STATUS_UNHANDLED_EXCEPTION) RtlRaiseStatus( status );
     return NtRaiseException( rec, context, FALSE );
@@ -1978,8 +1978,7 @@ void WINAPI DECLSPEC_HIDDEN __regs_RtlUnwind( EXCEPTION_REGISTRATION_RECORD* pEn
         }
         frame = __wine_pop_frame( frame );
     }
-
-    NtSetContextThread( GetCurrentThread(), context );
+    NtContinue( context, FALSE );
 }
 __ASM_STDCALL_FUNC( RtlUnwind, 16,
                     "pushl %ebp\n\t"
diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c
index 18ae3dbf2c..e4c30f38a4 100644
--- a/dlls/ntdll/signal_powerpc.c
+++ b/dlls/ntdll/signal_powerpc.c
@@ -372,10 +372,10 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte
     }
 
     if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if ((status = call_stack_handlers( rec, context )) == STATUS_SUCCESS)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if (status != STATUS_UNHANDLED_EXCEPTION) RtlRaiseStatus( status );
     return NtRaiseException( rec, context, FALSE );
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 961b6a9ab8..225cb981b0 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -2264,10 +2264,10 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte
     if (rec->ExceptionCode == EXCEPTION_BREAKPOINT) context->Rip--;
 
     if (call_vectored_handlers( rec, context ) == EXCEPTION_CONTINUE_EXECUTION)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if ((status = call_stack_handlers( rec, context )) == STATUS_SUCCESS)
-        NtSetContextThread( GetCurrentThread(), context );
+        NtContinue( context, FALSE );
 
     if (status != STATUS_UNHANDLED_EXCEPTION) RtlRaiseStatus( status );
     return NtRaiseException( rec, context, FALSE );




More information about the wine-cvs mailing list