@@ -4929,7 +4929,7 @@ LPVOID COMPlusCheckForAbort(UINT_PTR uTryCatchResumeAddress)
49294929 // we should maintain the original exception point's bucket details.
49304930 if (pUEWatsonBucketTracker->RetrieveWatsonBucketIp () != NULL )
49314931 {
4932- _ASSERTE (pUEWatsonBucketTracker->CapturedForThreadAbort () || pUEWatsonBucketTracker-> CapturedAtADTransition () );
4932+ _ASSERTE (pUEWatsonBucketTracker->CapturedForThreadAbort ());
49334933 fClearUEWatsonBucketTracker = FALSE ;
49344934 }
49354935#ifdef _DEBUG
@@ -6948,57 +6948,6 @@ LONG NotifyOfCHFFilterWrapper(
69486948 return ret;
69496949} // LONG NotifyOfCHFFilterWrapper()
69506950
6951- // This filter will be used process exceptions escaping out of AD transition boundaries
6952- // that are not at the base of the managed thread. Those are handled in ThreadBaseRedirectingFilter.
6953- // This will be invoked when an exception is going unhandled from the called AppDomain.
6954- //
6955- // This can be used to do last moment work before the exception gets caught by the EX_CATCH setup
6956- // at the AD transition point.
6957- LONG AppDomainTransitionExceptionFilter (
6958- EXCEPTION_POINTERS *pExceptionInfo, // the pExceptionInfo passed to a filter function.
6959- PVOID pParam)
6960- {
6961- // Ideally, we would be NOTHROW here. However, NotifyOfCHFFilterWrapper calls into
6962- // NotifyOfCHFFilter that is THROWS. Thus, to prevent contract violation,
6963- // we abide by the rules and be THROWS.
6964- //
6965- // Same rationale for GC_TRIGGERS as well.
6966- CONTRACTL
6967- {
6968- GC_TRIGGERS;
6969- MODE_ANY;
6970- THROWS;
6971- }
6972- CONTRACTL_END;
6973-
6974- ULONG ret = EXCEPTION_CONTINUE_SEARCH;
6975-
6976- // First, call into NotifyOfCHFFilterWrapper
6977- ret = NotifyOfCHFFilterWrapper (pExceptionInfo, pParam);
6978-
6979- #ifndef TARGET_UNIX
6980- // Setup the watson bucketing details if the escaping
6981- // exception is preallocated.
6982- if (SetupWatsonBucketsForEscapingPreallocatedExceptions ())
6983- {
6984- // Set the flag that these were captured at AD Transition
6985- DEBUG_STMT (GetThread ()->GetExceptionState ()->GetUEWatsonBucketTracker ()->SetCapturedAtADTransition ());
6986- }
6987-
6988- // Attempt to capture buckets for non-preallocated exceptions just before the AppDomain transition boundary
6989- {
6990- GCX_COOP ();
6991- OBJECTREF oThrowable = GetThread ()->GetThrowable ();
6992- if ((oThrowable != NULL ) && (CLRException::IsPreallocatedExceptionObject (oThrowable) == FALSE ))
6993- {
6994- SetupWatsonBucketsForNonPreallocatedExceptions ();
6995- }
6996- }
6997- #endif // !TARGET_UNIX
6998-
6999- return ret;
7000- } // LONG AppDomainTransitionExceptionFilter()
7001-
70026951// This filter will be used process exceptions escaping out of dynamic reflection invocation as
70036952// unhandled and will eventually be caught in the VM to be made as inner exception of
70046953// TargetInvocationException that will be thrown from the VM.
@@ -7911,25 +7860,7 @@ PTR_EHWatsonBucketTracker GetWatsonBucketTrackerForPreallocatedException(OBJECTR
79117860doValidation:
79127861 _ASSERTE (pWBTracker != NULL );
79137862
7914- // Incase of an OOM, we may not have an IP in the Watson bucket tracker. A scenario
7915- // would be default domain calling to AD 2 that calls into AD 3.
7916- //
7917- // AD 3 has an exception that is represented by a preallocated exception object. The
7918- // exception goes unhandled and reaches AD2/AD3 transition boundary. The bucketing details
7919- // from AD3 are copied to UETracker and once the exception is reraised in AD2, we will
7920- // enter SetupInitialThrowBucketingDetails to copy the bucketing details to the active
7921- // exception tracker.
7922- //
7923- // This copy operation could fail due to OOM and the active exception tracker in AD 2,
7924- // for the preallocated exception object, will not have any bucketing details. If the
7925- // exception remains unhandled in AD 2, then just before it reaches DefDomain/AD2 boundary,
7926- // we will attempt to capture the bucketing details in AppDomainTransitionExceptionFilter,
7927- // that will bring us here.
7928- //
7929- // In such a case, the active exception tracker will not have any bucket details for the
7930- // preallocated exception. In such a case, if the IP does not exist, we will return NULL
7931- // indicating that we couldnt find the Watson bucket tracker, since returning a tracker
7932- // that does not have any bucketing details will be of no use to the caller.
7863+ // In case of an OOM, we may not have an IP in the Watson bucket tracker.
79337864 if (pWBTracker->RetrieveWatsonBucketIp () != NULL )
79347865 {
79357866 // Check if the buckets exist or not..
@@ -8321,11 +8252,6 @@ void SetupInitialThrowBucketDetails(UINT_PTR adjustedIp)
83218252
83228253 // If we are here, then this was a new exception raised
83238254 // from outside the managed EH clauses (fault/finally/catch).
8324- //
8325- // The throwable *may* have the bucketing details already
8326- // if this exception was raised when it was crossing over
8327- // an AD transition boundary. Those are stored in UE watson bucket
8328- // tracker by AppDomainTransitionExceptionFilter.
83298255 if (fIsPreallocatedException )
83308256 {
83318257 PTR_EHWatsonBucketTracker pUEWatsonBucketTracker = pExState->GetUEWatsonBucketTracker ();
@@ -8351,10 +8277,8 @@ void SetupInitialThrowBucketDetails(UINT_PTR adjustedIp)
83518277 }
83528278 }
83538279#endif // _DEBUG
8354- // These should have been captured at AD transition OR
8355- // could be bucketing details of preallocated [rude] thread abort exception.
8356- _ASSERTE (pUEWatsonBucketTracker->CapturedAtADTransition () ||
8357- ((fIsThreadAbortException || fIsPreallocatedOOMExceptionForTA ) && pUEWatsonBucketTracker->CapturedForThreadAbort ()));
8280+ // These could be bucketing details of preallocated [rude] thread abort exception.
8281+ _ASSERTE ((fIsThreadAbortException || fIsPreallocatedOOMExceptionForTA ) && pUEWatsonBucketTracker->CapturedForThreadAbort ());
83588282
83598283 if (!fIsThreadAbortException )
83608284 {
@@ -8440,7 +8364,7 @@ void SetupInitialThrowBucketDetails(UINT_PTR adjustedIp)
84408364 if (ip != NULL )
84418365 {
84428366 // Confirm that we had the buckets captured for thread abort
8443- _ASSERTE (pUEWatsonBucketTracker->CapturedForThreadAbort () || pUEWatsonBucketTracker-> CapturedAtADTransition () );
8367+ _ASSERTE (pUEWatsonBucketTracker->CapturedForThreadAbort ());
84448368
84458369 if (pUEWatsonBucketTracker->RetrieveWatsonBuckets () != NULL )
84468370 {
0 commit comments