diff options
author | Jonghyun Park <parjong@gmail.com> | 2016-08-08 10:35:54 +0900 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2016-08-07 18:35:54 -0700 |
commit | deb00ad58acf627763b6c0a7833fa789e3bb1cd0 (patch) | |
tree | ae19843f8edf65cd855db91f6d2a18ead37c5167 /src/vm/arm | |
parent | 5976ffa9a624bd05bbb0d67a742e89bc9f16d1dc (diff) | |
download | coreclr-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/arm')
-rw-r--r-- | src/vm/arm/stubs.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vm/arm/stubs.cpp b/src/vm/arm/stubs.cpp index 9868cb6448..0b069da47e 100644 --- a/src/vm/arm/stubs.cpp +++ b/src/vm/arm/stubs.cpp @@ -544,7 +544,12 @@ void LazyMachState::unwindLazyState(LazyMachState* baseState, DacError(hr); } #else // DACCESS_COMPILE - PAL_VirtualUnwind(&ctx, &nonVolRegPtrs); + BOOL success = PAL_VirtualUnwind(&ctx, &nonVolRegPtrs); + if (!success) + { + _ASSERTE(!"unwindLazyState: Unwinding failed"); + EEPOLICY_HANDLE_FATAL_ERROR(COR_E_EXECUTIONENGINE); + } #endif // DACCESS_COMPILE pvControlPc = GetIP(&ctx); #endif // !FEATURE_PAL |