diff --git a/src/coreclr/nativeaot/Runtime/thread.cpp b/src/coreclr/nativeaot/Runtime/thread.cpp index cbae2f7ed8d4e8..fe65344da8f791 100644 --- a/src/coreclr/nativeaot/Runtime/thread.cpp +++ b/src/coreclr/nativeaot/Runtime/thread.cpp @@ -92,6 +92,9 @@ void Thread::WaitForGC(PInvokeTransitionFrame* pTransitionFrame) ClearState(TSF_Redirected); #endif //FEATURE_SUSPEND_REDIRECTION + // make sure this is cleared - in case a signal is lost or somehow we did not act on it + SetActivationPending(false); + GCHeapUtilities::GetGCHeap()->WaitUntilGCComplete(); // must be in cooperative mode when checking the trap flag diff --git a/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp b/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp index 873ae69c28ddf5..476633637ce2a4 100644 --- a/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp +++ b/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp @@ -1088,6 +1088,11 @@ HijackFunc* PalGetHijackTarget(HijackFunc* defaultHijackTarget) void PalHijack(Thread* pThreadToHijack) { + if (pThreadToHijack->IsActivationPending()) + { + return; + } + pThreadToHijack->SetActivationPending(true); int status = pthread_kill(pThreadToHijack->GetOSThreadHandle(), INJECT_ACTIVATION_SIGNAL);