diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2015-08-26 12:34:25 +0200 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2015-08-26 13:20:11 +0200 |
commit | e48ec9c8c5c3edb1b32251d57d766999da973d94 (patch) | |
tree | e7a3af8db585d461fd6c34b7a8e1a56e1c67c41e /src/vm/exceptionhandling.h | |
parent | 6f3131364edfe08c6c697a5b65279991e14e4d16 (diff) | |
download | coreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.tar.gz coreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.tar.bz2 coreclr-e48ec9c8c5c3edb1b32251d57d766999da973d94.zip |
Fix corner case of GC stack walking during exception handling
This change fixes a corner case of GC stack walking during exception handling
that I have missed in my previous fix. When GC suspends a thread while it is
performing second pass of exception handling, in some cases the previous
exception tracker is already collapsed into the current one and so the
evidence on a frame being a parent of an already executed handler funclet
cannot be extracted from previous trackers and stack walker tries to pass
an outdated reference to GC.
Fortunatelly, the information about the parent from the collapsed tracker
is stored in the tracker into which the collapsed one was merged and
so we can test it using that.
Diffstat (limited to 'src/vm/exceptionhandling.h')
-rw-r--r-- | src/vm/exceptionhandling.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/vm/exceptionhandling.h b/src/vm/exceptionhandling.h index 0f9e962ffe..c7f44b4b41 100644 --- a/src/vm/exceptionhandling.h +++ b/src/vm/exceptionhandling.h @@ -552,6 +552,13 @@ public: return m_sfCallerOfActualHandlerFrame; } + StackFrame GetCallerOfCollapsedActualHandlingFrame() + { + LIMITED_METHOD_CONTRACT; + + return m_EnclosingClauseInfoOfCollapsedTracker.GetEnclosingClauseCallerSP(); + } + #ifndef FEATURE_PAL private: EHWatsonBucketTracker m_WatsonBucketTracker; |