diff options
Diffstat (limited to 'src/pal')
-rw-r--r-- | src/pal/src/exception/signal.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/pal/src/exception/signal.cpp b/src/pal/src/exception/signal.cpp index 6748d54f0f..0a3840a479 100644 --- a/src/pal/src/exception/signal.cpp +++ b/src/pal/src/exception/signal.cpp @@ -845,7 +845,6 @@ static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext { sigset_t signal_set; CONTEXT signalContextRecord; - CONTEXT contextRecord; EXCEPTION_RECORD exceptionRecord; native_context_t *ucontext; @@ -868,7 +867,7 @@ static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext // Pre-populate context with data from current frame, because ucontext doesn't have some data (e.g. SS register) // which is required for restoring context - RtlCaptureContext(&contextRecord); + RtlCaptureContext(&signalContextRecord); ULONG contextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT; @@ -879,7 +878,7 @@ static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext // Fill context record with required information. from pal.h: // On non-Win32 platforms, the CONTEXT pointer in the // PEXCEPTION_POINTERS will contain at least the CONTEXT_CONTROL registers. - CONTEXTFromNativeContext(ucontext, &contextRecord, contextFlags); + CONTEXTFromNativeContext(ucontext, &signalContextRecord, contextFlags); /* Unmask signal so we can receive it again */ sigemptyset(&signal_set); @@ -890,17 +889,15 @@ static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext ASSERT("pthread_sigmask failed; error number is %d\n", sigmaskRet); } - contextRecord.ContextFlags |= CONTEXT_EXCEPTION_ACTIVE; - - memcpy_s(&signalContextRecord, sizeof(CONTEXT), &contextRecord, sizeof(CONTEXT)); + signalContextRecord.ContextFlags |= CONTEXT_EXCEPTION_ACTIVE; // The exception object takes ownership of the exceptionRecord and contextRecord - PAL_SEHException exception(&exceptionRecord, &contextRecord, true); + PAL_SEHException exception(&exceptionRecord, &signalContextRecord, true); if (SEHProcessException(&exception)) { // Exception handling may have modified the context, so update it. - CONTEXTToNativeContext(&contextRecord, ucontext); + CONTEXTToNativeContext(exception.ExceptionPointers.ContextRecord, ucontext); return true; } |