summaryrefslogtreecommitdiff
path: root/src/vm/arm64/stubs.cpp
diff options
context:
space:
mode:
authorJonghyun Park <parjong@gmail.com>2016-08-08 10:35:54 +0900
committerJan Kotas <jkotas@microsoft.com>2016-08-07 18:35:54 -0700
commitdeb00ad58acf627763b6c0a7833fa789e3bb1cd0 (patch)
treeae19843f8edf65cd855db91f6d2a18ead37c5167 /src/vm/arm64/stubs.cpp
parent5976ffa9a624bd05bbb0d67a742e89bc9f16d1dc (diff)
downloadcoreclr-deb00ad58acf627763b6c0a7833fa789e3bb1cd0.tar.gz
coreclr-deb00ad58acf627763b6c0a7833fa789e3bb1cd0.tar.bz2
coreclr-deb00ad58acf627763b6c0a7833fa789e3bb1cd0.zip
Check PAL_VirtualUnwind failure during GC (#6598)
As discussed in #6525, PAL_VirtualUnwind sometimes fails during GC. This GC failure leads to very unpredicatble behavior (which is very hard to analyze). This commit tries to stop the execution at the point where error happens.
Diffstat (limited to 'src/vm/arm64/stubs.cpp')
-rw-r--r--src/vm/arm64/stubs.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vm/arm64/stubs.cpp b/src/vm/arm64/stubs.cpp
index 7db8a31f20..2b239cdaff 100644
--- a/src/vm/arm64/stubs.cpp
+++ b/src/vm/arm64/stubs.cpp
@@ -330,7 +330,12 @@ void LazyMachState::unwindLazyState(LazyMachState* baseState,
DacError(hr);
}
#else // DACCESS_COMPILE
- PAL_VirtualUnwind(&context, &nonVolContextPtrs);
+ BOOL success = PAL_VirtualUnwind(&ctx, &nonVolContextPtrs);
+ if (!success)
+ {
+ _ASSERTE(!"unwindLazyState: Unwinding failed");
+ EEPOLICY_HANDLE_FATAL_ERROR(COR_E_EXECUTIONENGINE);
+ }
#endif // DACCESS_COMPILE
pvControlPc = GetIP(&context);
#endif // !FEATURE_PAL