summaryrefslogtreecommitdiff
path: root/src/vm/exceptionhandling.h
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2015-04-08 00:27:21 +0200
committerJan Vorlicek <janvorli@microsoft.com>2015-04-08 00:27:21 +0200
commit65f2393c54428b5b5f540805df6d7ae8b4e8d77a (patch)
tree1075c95e2ef8ef79f3e3a992483d012bd62093e2 /src/vm/exceptionhandling.h
parent838807429a0828a839958e3b7d392d65886c8f2e (diff)
downloadcoreclr-65f2393c54428b5b5f540805df6d7ae8b4e8d77a.tar.gz
coreclr-65f2393c54428b5b5f540805df6d7ae8b4e8d77a.tar.bz2
coreclr-65f2393c54428b5b5f540805df6d7ae8b4e8d77a.zip
Fix exception handling issue (#633)
This change fixes exception handling issue #633. The problem was caused by the fact that in interleaved exception handling (when exception propagates over one or more native / managed stack frame boundaries), we were preserving the m_ScannedStackRange and m_sfResumeStackFrame members of the exception tracker after unwinding a sequence of native frames and moving on into next block of managed ones. The m_ScannedStackRange in that case contained addresses of frames that were already unwound and in case of a rethrown exception, there could have been new frames in that range. That lead to improper detection of already processed frames in some cases. The proper solution is to start with an empty scanned stack range after the partial unwind that unwinds managed and the adjacent native frames.
Diffstat (limited to 'src/vm/exceptionhandling.h')
-rw-r--r--src/vm/exceptionhandling.h8
1 files changed, 0 insertions, 8 deletions
diff --git a/src/vm/exceptionhandling.h b/src/vm/exceptionhandling.h
index 9362fa4a65..820f0d3c5f 100644
--- a/src/vm/exceptionhandling.h
+++ b/src/vm/exceptionhandling.h
@@ -669,8 +669,6 @@ private: ;
// is propagated to the new tracker instance.
class PartialTrackerState
{
- StackFrame m_sfResumeStackFrame;
- StackRange m_ScannedStackRange;
UINT_PTR m_uCatchToCallPC;
PTR_EXCEPTION_CLAUSE_TOKEN m_pClauseForCatchToken;
EE_ILEXCEPTION_CLAUSE m_ClauseForCatch;
@@ -692,12 +690,6 @@ private: ;
// reuse its memory, if it's non-NULL, it better be a valid thread pointer
StackRange m_ScannedStackRange;
- // Range used to initialize the m_ScannedStackRange at start of the 2nd pass.
- // This is:
- // 1) null range for non-interleaved exception handling and the very first
- // 2nd pass of the interleaved handling and
- // 2) non-null for the other 2nd passes of the interleaved handling.
- StackRange m_secondPassInitialScannedStackRange;
DAC_EXCEPTION_POINTERS m_ptrs;
OBJECTHANDLE m_hThrowable;
StackTraceInfo m_StackTraceInfo;