From 1643bbdd9232fbf45cfd702b6b41c891f1ac77ae Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Mon, 2 Mar 2020 08:41:58 -0800 Subject: [PATCH] Delete lock accounting This is left-over from CLR SQL support. We do not need it in CoreCLR. --- src/coreclr/src/debug/daccess/request.cpp | 2 +- src/coreclr/src/vm/amd64/asmconstants.h | 11 ---- src/coreclr/src/vm/comthreadpool.cpp | 22 ------- src/coreclr/src/vm/eepolicy.cpp | 14 +---- src/coreclr/src/vm/i386/asmconstants.h | 5 -- src/coreclr/src/vm/interpreter.cpp | 7 +-- src/coreclr/src/vm/jithelpers.cpp | 7 +-- src/coreclr/src/vm/syncblk.cpp | 15 +---- src/coreclr/src/vm/syncblk.inl | 7 --- src/coreclr/src/vm/threadpoolrequest.cpp | 3 - src/coreclr/src/vm/threads.cpp | 6 -- src/coreclr/src/vm/threads.h | 31 +--------- src/coreclr/src/vm/threads.inl | 16 ----- src/coreclr/src/vm/threadsuspend.cpp | 72 +++++++---------------- 14 files changed, 27 insertions(+), 191 deletions(-) diff --git a/src/coreclr/src/debug/daccess/request.cpp b/src/coreclr/src/debug/daccess/request.cpp index 3d06176abe60f2..ea19c456c912c4 100644 --- a/src/coreclr/src/debug/daccess/request.cpp +++ b/src/coreclr/src/debug/daccess/request.cpp @@ -763,7 +763,7 @@ ClrDataAccess::GetThreadData(CLRDATA_ADDRESS threadAddr, struct DacpThreadData * threadData->pFrame = PTR_CDADDR(thread->m_pFrame); threadData->context = PTR_CDADDR(thread->m_pDomain); threadData->domain = PTR_CDADDR(thread->m_pDomain); - threadData->lockCount = thread->m_dwLockCount; + threadData->lockCount = (DWORD)-1; #ifndef TARGET_UNIX threadData->teb = TO_CDADDR(thread->m_pTEB); #else diff --git a/src/coreclr/src/vm/amd64/asmconstants.h b/src/coreclr/src/vm/amd64/asmconstants.h index 74b238e0e7ed1b..6c361f9bcf056f 100644 --- a/src/coreclr/src/vm/amd64/asmconstants.h +++ b/src/coreclr/src/vm/amd64/asmconstants.h @@ -139,17 +139,6 @@ ASMCONSTANTS_C_ASSERT(OFFSETOF__Thread__m_pFrame #define Thread_m_pFrame OFFSETOF__Thread__m_pFrame #ifndef CROSSGEN_COMPILE -#define OFFSETOF__Thread__m_State 0x8 -ASMCONSTANTS_C_ASSERT(OFFSETOF__Thread__m_State - == offsetof(Thread, m_State)); - -#define OFFSETOF__Thread__m_dwLockCount 0x20 -ASMCONSTANTS_C_ASSERT(OFFSETOF__Thread__m_dwLockCount - == offsetof(Thread, m_dwLockCount)); - -#define OFFSETOF__Thread__m_ThreadId 0x24 -ASMCONSTANTS_C_ASSERT(OFFSETOF__Thread__m_ThreadId - == offsetof(Thread, m_ThreadId)); #define OFFSET__Thread__m_alloc_context__alloc_ptr 0x58 ASMCONSTANTS_C_ASSERT(OFFSET__Thread__m_alloc_context__alloc_ptr == offsetof(Thread, m_alloc_context) + offsetof(gc_alloc_context, alloc_ptr)); diff --git a/src/coreclr/src/vm/comthreadpool.cpp b/src/coreclr/src/vm/comthreadpool.cpp index b726736639919c..a87d954615a4b8 100644 --- a/src/coreclr/src/vm/comthreadpool.cpp +++ b/src/coreclr/src/vm/comthreadpool.cpp @@ -381,18 +381,11 @@ VOID NTAPI RegisterWaitForSingleObjectCallback(PVOID delegateInfo, BOOLEAN Timer } CONTRACTL_END; - // This thread should not have any locks held at entry point. - _ASSERTE(pThread->m_dwLockCount == 0); - GCX_COOP(); RegisterWaitForSingleObjectCallback_Args args = { ((DelegateInfo*) delegateInfo), TimerOrWaitFired }; ManagedThreadBase::ThreadPool(RegisterWaitForSingleObjectCallback_Worker, &args); - - // We should have released all locks. - _ASSERTE(g_fEEShutDown || pThread->m_dwLockCount == 0 || pThread->m_fRudeAborted); - return; } FCIMPL5(LPVOID, ThreadPoolNative::CorRegisterWaitForSingleObject, @@ -465,9 +458,6 @@ VOID QueueUserWorkItemManagedCallback(PVOID pArg) _ASSERTE(NULL != pArg); - // This thread should not have any locks held at entry point. - _ASSERTE(GetThread()->m_dwLockCount == 0); - bool* wasNotRecalled = (bool*)pArg; MethodDescCallSite dispatch(METHOD__TP_WAIT_CALLBACK__PERFORM_WAIT_CALLBACK); @@ -661,9 +651,6 @@ void __stdcall BindIoCompletionCallbackStubEx(DWORD ErrorCode, } CONTRACTL_END; - // This thread should not have any locks held at entry point. - _ASSERTE(pThread->m_dwLockCount == 0); - LOG((LF_INTEROP, LL_INFO10000, "In IO_CallBackStub thread 0x%x retCode 0x%x, overlap 0x%x\n", pThread, ErrorCode, lpOverlapped)); GCX_COOP(); @@ -672,9 +659,6 @@ void __stdcall BindIoCompletionCallbackStubEx(DWORD ErrorCode, ManagedThreadBase::ThreadPool(BindIoCompletionCallBack_Worker, &args); LOG((LF_INTEROP, LL_INFO10000, "Leaving IO_CallBackStub thread 0x%x retCode 0x%x, overlap 0x%x\n", pThread, ErrorCode, lpOverlapped)); - // We should have released all locks. - _ASSERTE(g_fEEShutDown || pThread->m_dwLockCount == 0 || pThread->m_fRudeAborted); - return; } void WINAPI BindIoCompletionCallbackStub(DWORD ErrorCode, @@ -814,16 +798,10 @@ VOID WINAPI AppDomainTimerCallback(PVOID callbackState, BOOLEAN timerOrWaitFired } CONTRACTL_END; - // This thread should not have any locks held at entry point. - _ASSERTE(pThread->m_dwLockCount == 0); - GCX_COOP(); ThreadpoolMgr::TimerInfoContext* pTimerInfoContext = (ThreadpoolMgr::TimerInfoContext*)callbackState; ManagedThreadBase::ThreadPool(AppDomainTimerCallback_Worker, pTimerInfoContext); - - // We should have released all locks. - _ASSERTE(g_fEEShutDown || pThread->m_dwLockCount == 0 || pThread->m_fRudeAborted); } HANDLE QCALLTYPE AppDomainTimerNative::CreateAppDomainTimer(INT32 dueTime, INT32 timerId) diff --git a/src/coreclr/src/vm/eepolicy.cpp b/src/coreclr/src/vm/eepolicy.cpp index 075737e0f8a34f..c2a472ed766461 100644 --- a/src/coreclr/src/vm/eepolicy.cpp +++ b/src/coreclr/src/vm/eepolicy.cpp @@ -265,14 +265,7 @@ EPolicyAction EEPolicy::GetFinalAction(EPolicyAction action, Thread *pThread) defaultAction = m_DefaultAction[OPR_ThreadAbort]; break; case eRudeAbortThread: - if (pThread && !pThread->HasLockInCurrentDomain()) - { - defaultAction = m_DefaultAction[OPR_ThreadRudeAbortInNonCriticalRegion]; - } - else - { defaultAction = m_DefaultAction[OPR_ThreadRudeAbortInCriticalRegion]; - } break; case eUnloadAppDomain: defaultAction = m_DefaultAction[OPR_AppDomainUnload]; @@ -591,12 +584,7 @@ EPolicyAction EEPolicy::DetermineResourceConstraintAction(Thread *pThread) } CONTRACTL_END; - EPolicyAction action; - if (pThread->HasLockInCurrentDomain()) { - action = GetEEPolicy()->GetActionOnFailure(FAIL_CriticalResource); - } - else - action = GetEEPolicy()->GetActionOnFailure(FAIL_NonCriticalResource); + EPolicyAction action = GetEEPolicy()->GetActionOnFailure(FAIL_CriticalResource); AppDomain *pDomain = GetAppDomain(); // If it is default domain, we can not unload the appdomain diff --git a/src/coreclr/src/vm/i386/asmconstants.h b/src/coreclr/src/vm/i386/asmconstants.h index 554219356efb33..33bb341078b977 100644 --- a/src/coreclr/src/vm/i386/asmconstants.h +++ b/src/coreclr/src/vm/i386/asmconstants.h @@ -189,11 +189,6 @@ ASMCONSTANTS_C_ASSERT(Thread_m_pFrame == offsetof(Thread, m_pFrame)) #endif // CROSSGEN_COMPILE #ifndef CROSSGEN_COMPILE -#define Thread_m_dwLockCount 0x14 -ASMCONSTANTS_C_ASSERT(Thread_m_dwLockCount == offsetof(Thread, m_dwLockCount)) - -#define Thread_m_ThreadId 0x18 -ASMCONSTANTS_C_ASSERT(Thread_m_ThreadId == offsetof(Thread, m_ThreadId)) #ifdef FEATURE_HIJACK #define TS_Hijacked_ASM 0x80 diff --git a/src/coreclr/src/vm/interpreter.cpp b/src/coreclr/src/vm/interpreter.cpp index 7386ee7ec98d09..7d35691b5671be 100644 --- a/src/coreclr/src/vm/interpreter.cpp +++ b/src/coreclr/src/vm/interpreter.cpp @@ -1747,17 +1747,12 @@ static void MonitorEnter(Object* obj, BYTE* pbLockTaken) GCPROTECT_BEGININTERIOR(pbLockTaken); -#ifdef _DEBUG - Thread *pThread = GetThread(); - DWORD lockCount = pThread->m_dwLockCount; -#endif if (GET_THREAD()->CatchAtSafePointOpportunistic()) { GET_THREAD()->PulseGCMode(); } objRef->EnterObjMonitor(); - _ASSERTE ((objRef->GetSyncBlock()->GetMonitor()->GetRecursionLevel() == 1 && pThread->m_dwLockCount == lockCount + 1) || - pThread->m_dwLockCount == lockCount); + if (pbLockTaken != 0) *pbLockTaken = 1; GCPROTECT_END(); diff --git a/src/coreclr/src/vm/jithelpers.cpp b/src/coreclr/src/vm/jithelpers.cpp index 263a29d00832d6..4c15180afe9f3f 100644 --- a/src/coreclr/src/vm/jithelpers.cpp +++ b/src/coreclr/src/vm/jithelpers.cpp @@ -3807,17 +3807,12 @@ NOINLINE static void JIT_MonEnter_Helper(Object* obj, BYTE* pbLockTaken, LPVOID GCPROTECT_BEGININTERIOR(pbLockTaken); -#ifdef _DEBUG - Thread *pThread = GetThread(); - DWORD lockCount = pThread->m_dwLockCount; -#endif if (GET_THREAD()->CatchAtSafePointOpportunistic()) { GET_THREAD()->PulseGCMode(); } objRef->EnterObjMonitor(); - _ASSERTE ((objRef->GetSyncBlock()->GetMonitor()->GetRecursionLevel() == 1 && pThread->m_dwLockCount == lockCount + 1) || - pThread->m_dwLockCount == lockCount); + if (pbLockTaken != 0) *pbLockTaken = 1; GCPROTECT_END(); diff --git a/src/coreclr/src/vm/syncblk.cpp b/src/coreclr/src/vm/syncblk.cpp index d24b285ef4206e..7629279a4e2523 100644 --- a/src/coreclr/src/vm/syncblk.cpp +++ b/src/coreclr/src/vm/syncblk.cpp @@ -1669,7 +1669,6 @@ AwareLock::EnterHelperResult ObjHeader::EnterObjMonitorHelperSpin(Thread* pCurTh LONG newValue = oldValue | tid; if (InterlockedCompareExchangeAcquire((LONG*)&m_SyncBlockValue, newValue, oldValue) == oldValue) { - pCurThread->IncLockCount(); return AwareLock::EnterHelperResult_Entered; } @@ -2279,16 +2278,7 @@ BOOL ObjHeader::Wait(INT32 timeOut, BOOL exitContext) if (!pSB->DoesCurrentThreadOwnMonitor()) COMPlusThrow(kSynchronizationLockException); -#ifdef _DEBUG - Thread *pThread = GetThread(); - DWORD curLockCount = pThread->m_dwLockCount; -#endif - - BOOL result = pSB->Wait(timeOut,exitContext); - - _ASSERTE (curLockCount == pThread->m_dwLockCount); - - return result; + return pSB->Wait(timeOut,exitContext); } void ObjHeader::Pulse() @@ -2394,7 +2384,6 @@ void AwareLock::Enter() // We get here if we successfully acquired the mutex. m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); #if defined(_DEBUG) && defined(TRACK_SYNC) // The best place to grab this is from the ECall frame @@ -2457,7 +2446,6 @@ BOOL AwareLock::TryEnter(INT32 timeOut) // We get here if we successfully acquired the mutex. m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); #if defined(_DEBUG) && defined(TRACK_SYNC) // The best place to grab this is from the ECall frame @@ -2726,7 +2714,6 @@ BOOL AwareLock::EnterEpilogHelper(Thread* pCurThread, INT32 timeOut) m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); #if defined(_DEBUG) && defined(TRACK_SYNC) // The best place to grab this is from the ECall frame diff --git a/src/coreclr/src/vm/syncblk.inl b/src/coreclr/src/vm/syncblk.inl index ac02609665def5..1d62e80ff3b2af 100644 --- a/src/coreclr/src/vm/syncblk.inl +++ b/src/coreclr/src/vm/syncblk.inl @@ -480,7 +480,6 @@ FORCEINLINE bool AwareLock::TryEnterHelper(Thread* pCurThread) { m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); return true; } @@ -526,7 +525,6 @@ FORCEINLINE AwareLock::EnterHelperResult AwareLock::TryEnterBeforeSpinLoopHelper // Lock was acquired and the spinner was not registered m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); return EnterHelperResult_Entered; } @@ -558,7 +556,6 @@ FORCEINLINE AwareLock::EnterHelperResult AwareLock::TryEnterInsideSpinLoopHelper // Lock was acquired and spinner was unregistered m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); return EnterHelperResult_Entered; } @@ -581,7 +578,6 @@ FORCEINLINE bool AwareLock::TryEnterAfterSpinLoopHelper(Thread *pCurThread) // Spinner was unregistered and the lock was acquired m_HoldingThread = pCurThread; m_Recursion = 1; - pCurThread->IncLockCount(); return true; } @@ -609,7 +605,6 @@ FORCEINLINE AwareLock::EnterHelperResult ObjHeader::EnterObjMonitorHelper(Thread LONG newValue = oldValue | tid; if (InterlockedCompareExchangeAcquire((LONG*)&m_SyncBlockValue, newValue, oldValue) == oldValue) { - pCurThread->IncLockCount(); return AwareLock::EnterHelperResult_Entered; } @@ -691,7 +686,6 @@ FORCEINLINE AwareLock::LeaveHelperAction AwareLock::LeaveHelper(Thread* pCurThre if (--m_Recursion == 0) { - m_HoldingThread->DecLockCount(); m_HoldingThread = NULL; // Clear lock bit and determine whether we must signal a waiter to wake @@ -734,7 +728,6 @@ FORCEINLINE AwareLock::LeaveHelperAction ObjHeader::LeaveObjMonitorHelper(Thread { return AwareLock::LeaveHelperAction_Yield; } - pCurThread->DecLockCount(); } else { diff --git a/src/coreclr/src/vm/threadpoolrequest.cpp b/src/coreclr/src/vm/threadpoolrequest.cpp index a45143b23fc07a..956ad7c4fac590 100644 --- a/src/coreclr/src/vm/threadpoolrequest.cpp +++ b/src/coreclr/src/vm/threadpoolrequest.cpp @@ -651,9 +651,6 @@ void ManagedPerAppDomainTPCount::DispatchWorkItem(bool* foundWork, bool* wasNotR } } - // We should have released all locks. - _ASSERTE(g_fEEShutDown || pThread->m_dwLockCount == 0 || pThread->m_fRudeAborted); - *foundWork = true; } } diff --git a/src/coreclr/src/vm/threads.cpp b/src/coreclr/src/vm/threads.cpp index 1f9c3ce234a0fa..63565b1b0a631e 100644 --- a/src/coreclr/src/vm/threads.cpp +++ b/src/coreclr/src/vm/threads.cpp @@ -848,8 +848,6 @@ void DestroyThread(Thread *th) _ASSERTE (th == GetThread()); - _ASSERTE(g_fEEShutDown || th->m_dwLockCount == 0 || th->m_fRudeAborted); - GCX_PREEMP_NO_DTOR(); if (th->IsAbortRequested()) { @@ -934,7 +932,6 @@ HRESULT Thread::DetachThread(BOOL fDLLThreadDetach) #endif // FEATURE_COMINTEROP _ASSERTE(!PreemptiveGCDisabled()); - _ASSERTE(g_fEEShutDown || m_dwLockCount == 0 || m_fRudeAborted); _ASSERTE ((m_State & Thread::TS_Detached) == 0); @@ -1325,9 +1322,6 @@ Thread::Thread() m_ulEnablePreemptiveGCCount = 0; #endif - m_dwLockCount = 0; - m_dwBeginLockCount = 0; - #ifdef _DEBUG dbg_m_cSuspendedThreads = 0; dbg_m_cSuspendedThreadsWithoutOSLock = 0; diff --git a/src/coreclr/src/vm/threads.h b/src/coreclr/src/vm/threads.h index 112a96d42134db..6144ec3bc3d1bc 100644 --- a/src/coreclr/src/vm/threads.h +++ b/src/coreclr/src/vm/threads.h @@ -284,9 +284,6 @@ class Thread void EnablePreemptiveGC() { } void DisablePreemptiveGC() { } - inline void IncLockCount() { } - inline void DecLockCount() { } - static LPVOID GetStaticFieldAddress(FieldDesc *pFD) { return NULL; } PTR_AppDomain GetDomain() { return ::GetAppDomain(); } @@ -1187,9 +1184,7 @@ class Thread // unused = 0x00080000, TSNC_RaiseUnloadEvent = 0x00100000, // Finalize thread is raising managed unload event which // may call AppDomain.Unload. - TSNC_UnbalancedLocks = 0x00200000, // Do not rely on lock accounting for this thread: - // we left an app domain with a lock count different from - // when we entered it + // unused = 0x00200000, // unused = 0x00400000, TSNC_IgnoreUnhandledExceptions = 0x00800000, // Set for a managed thread born inside an appdomain created with the APPDOMAIN_IGNORE_UNHANDLED_EXCEPTIONS flag. TSNC_ProcessedUnhandledException = 0x01000000,// Set on a thread on which we have done unhandled exception processing so that @@ -1504,10 +1499,6 @@ class Thread //----------------------------------------------------------- PTR_AppDomain m_pDomain; - // Track the number of locks (critical section, spin lock, syncblock lock, - // EE Crst, GC lock) held by the current thread. - DWORD m_dwLockCount; - // Unique thread id used for thin locks - kept as small as possible, as we have limited space // in the object header to store it. DWORD m_ThreadId; @@ -1635,12 +1626,7 @@ class Thread // Flags for thread states that have no concurrency issues. ThreadStateNoConcurrency m_StateNC; - inline void IncLockCount(); - inline void DecLockCount(); - private: - DWORD m_dwBeginLockCount; // lock count when the thread enters current domain - #ifdef _DEBUG DWORD dbg_m_cSuspendedThreads; // Count of suspended threads that we know are not in native code (and therefore cannot hold OS lock which prevents us calling out to host) @@ -1720,21 +1706,6 @@ class Thread DWORD m_dwHashCodeSeed; public: - - inline BOOL HasLockInCurrentDomain() - { - LIMITED_METHOD_CONTRACT; - - _ASSERTE(m_dwLockCount >= m_dwBeginLockCount); - - // Equivalent to (m_dwLockCount != m_dwBeginLockCount || - // m_dwCriticalRegionCount ! m_dwBeginCriticalRegionCount), - // but without branching instructions - BOOL fHasLock = (m_dwLockCount ^ m_dwBeginLockCount); - - return fHasLock; - } - inline DWORD GetNewHashCode() { LIMITED_METHOD_CONTRACT; diff --git a/src/coreclr/src/vm/threads.inl b/src/coreclr/src/vm/threads.inl index aa7fa9f6cb4f72..66782f956d7e2b 100644 --- a/src/coreclr/src/vm/threads.inl +++ b/src/coreclr/src/vm/threads.inl @@ -41,22 +41,6 @@ EXTERN_C inline AppDomain* STDCALL GetAppDomain() #endif // !DACCESS_COMPILE -inline void Thread::IncLockCount() -{ - LIMITED_METHOD_CONTRACT; - _ASSERTE(GetThread() == this); - m_dwLockCount++; - _ASSERTE(m_dwLockCount != 0 || HasThreadStateNC(TSNC_UnbalancedLocks)); -} - -inline void Thread::DecLockCount() -{ - LIMITED_METHOD_CONTRACT; - _ASSERTE(GetThread() == this); - _ASSERTE(m_dwLockCount > 0 || HasThreadStateNC(TSNC_UnbalancedLocks)); - m_dwLockCount--; -} - inline Frame* Thread::FindFrame(SIZE_T StackPointer) { diff --git a/src/coreclr/src/vm/threadsuspend.cpp b/src/coreclr/src/vm/threadsuspend.cpp index eb51e67ffe5760..75fd875b99b2c5 100644 --- a/src/coreclr/src/vm/threadsuspend.cpp +++ b/src/coreclr/src/vm/threadsuspend.cpp @@ -1257,14 +1257,7 @@ Thread::UserAbort(ThreadAbortRequester requester, EClrOperation operation; if (abortType == EEPolicy::TA_Rude) { - if (HasLockInCurrentDomain()) - { - operation = OPR_ThreadRudeAbortInCriticalRegion; - } - else - { - operation = OPR_ThreadRudeAbortInNonCriticalRegion; - } + operation = OPR_ThreadRudeAbortInCriticalRegion; } else { @@ -1322,10 +1315,6 @@ Thread::UserAbort(ThreadAbortRequester requester, { timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadAbort); } - else if (!HasLockInCurrentDomain()) - { - timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInNonCriticalRegion); - } else { timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInCriticalRegion); @@ -1423,16 +1412,11 @@ Thread::UserAbort(ThreadAbortRequester requester, action1 = GetEEPolicy()->GetActionOnTimeout(OPR_ThreadAbort, this); timeout1 = GetEEPolicy()->GetTimeout(OPR_ThreadAbort); } - else if (HasLockInCurrentDomain()) + else { action1 = GetEEPolicy()->GetActionOnTimeout(OPR_ThreadRudeAbortInCriticalRegion, this); timeout1 = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInCriticalRegion); } - else - { - action1 = GetEEPolicy()->GetActionOnTimeout(OPR_ThreadRudeAbortInNonCriticalRegion, this); - timeout1 = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInNonCriticalRegion); - } } if (action1 == eNoAction) { @@ -1876,13 +1860,9 @@ Thread::UserAbort(ThreadAbortRequester requester, { operation1 = OPR_ThreadAbort; } - else if (HasLockInCurrentDomain()) - { - operation1 = OPR_ThreadRudeAbortInCriticalRegion; - } else { - operation1 = OPR_ThreadRudeAbortInNonCriticalRegion; + operation1 = OPR_ThreadRudeAbortInCriticalRegion; } action1 = GetEEPolicy()->GetActionOnTimeout(operation1, this); switch (action1) @@ -2056,10 +2036,6 @@ void Thread::MarkThreadForAbort(ThreadAbortRequester requester, EEPolicy::Thread { timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadAbort); } - else if (!HasLockInCurrentDomain()) - { - timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInNonCriticalRegion); - } else { timeoutFromPolicy = GetEEPolicy()->GetTimeout(OPR_ThreadRudeAbortInCriticalRegion); @@ -2620,13 +2596,9 @@ void Thread::HandleThreadAbortTimeout() { operation = OPR_ThreadAbort; } - else if (HasLockInCurrentDomain()) - { - operation = OPR_ThreadRudeAbortInCriticalRegion; - } else { - operation = OPR_ThreadRudeAbortInNonCriticalRegion; + operation = OPR_ThreadRudeAbortInCriticalRegion; } action = GetEEPolicy()->GetActionOnTimeout(operation, this); // We only support escalation to rude abort @@ -2726,25 +2698,23 @@ void Thread::PreWorkForThreadAbort() ResetUserInterrupted(); if (IsRudeAbort()) { - if (HasLockInCurrentDomain()) { - AppDomain *pDomain = GetAppDomain(); - // Cannot enable the following assertion. - // We may take the lock, but the lock will be released during exception backout. - //_ASSERTE(!pDomain->IsDefaultDomain()); - EPolicyAction action = GetEEPolicy()->GetDefaultAction(OPR_ThreadRudeAbortInCriticalRegion, this); - switch (action) - { - case eExitProcess: - case eFastExitProcess: - case eRudeExitProcess: - { - GetEEPolicy()->NotifyHostOnDefaultAction(OPR_ThreadRudeAbortInCriticalRegion,action); - GetEEPolicy()->HandleExitProcessFromEscalation(action,HOST_E_EXITPROCESS_ADUNLOAD); - } - break; - default: - break; - } + AppDomain *pDomain = GetAppDomain(); + // Cannot enable the following assertion. + // We may take the lock, but the lock will be released during exception backout. + //_ASSERTE(!pDomain->IsDefaultDomain()); + EPolicyAction action = GetEEPolicy()->GetDefaultAction(OPR_ThreadRudeAbortInCriticalRegion, this); + switch (action) + { + case eExitProcess: + case eFastExitProcess: + case eRudeExitProcess: + { + GetEEPolicy()->NotifyHostOnDefaultAction(OPR_ThreadRudeAbortInCriticalRegion,action); + GetEEPolicy()->HandleExitProcessFromEscalation(action,HOST_E_EXITPROCESS_ADUNLOAD); + } + break; + default: + break; } } }