Delete Thread-related dead code (#450)
authorJan Kotas <jkotas@microsoft.com>
Tue, 3 Dec 2019 00:08:44 +0000 (16:08 -0800)
committerStephen Toub <stoub@microsoft.com>
Tue, 3 Dec 2019 00:08:44 +0000 (19:08 -0500)
* Delete Thread::m_threadsAtUnsafePlaces

Never used. Always zero.

* Delete Thread::m_pLoadingFile

Never used

* Delete Thread::m_nNestedMarshalingExceptions

Never used

* Delete Thread::m_PreventAbort

Never used

* Delete DisableAbortCheckHolder

* Delete GetCurrentTaskType()

* Delete ForbidSuspendThreadCrstHolder

* Delete Thread::IsWithinCer

* Delete fOneOnly

* Move GetProcessMemoryLoad

* Delete m_CleanupIPs

* Delete 64k aliasing conflict workaround for Pentium 4

Not needed and/or included in the OS libraries

* Delete loader heap perf counters

* Delete SOWork*

* Delete ClearThrowablesForUnload

28 files changed:
src/coreclr/src/inc/MSCOREE.IDL
src/coreclr/src/inc/loaderheap.h
src/coreclr/src/pal/prebuilt/inc/mscoree.h
src/coreclr/src/utilcode/loaderheap.cpp
src/coreclr/src/vm/callhelpers.h
src/coreclr/src/vm/ceeload.cpp
src/coreclr/src/vm/ceemain.cpp
src/coreclr/src/vm/codeman.cpp
src/coreclr/src/vm/codeman.h
src/coreclr/src/vm/comthreadpool.cpp
src/coreclr/src/vm/corhost.cpp
src/coreclr/src/vm/domainfile.cpp
src/coreclr/src/vm/exceptionhandling.cpp
src/coreclr/src/vm/exstate.cpp
src/coreclr/src/vm/exstate.h
src/coreclr/src/vm/fcall.cpp
src/coreclr/src/vm/gcenv.os.cpp
src/coreclr/src/vm/i386/excepx86.cpp
src/coreclr/src/vm/loaderallocator.cpp
src/coreclr/src/vm/peimage.cpp
src/coreclr/src/vm/threads.cpp
src/coreclr/src/vm/threads.h
src/coreclr/src/vm/threads.inl
src/coreclr/src/vm/threadsuspend.cpp
src/coreclr/src/vm/util.hpp
src/coreclr/src/vm/virtualcallstub.cpp
src/coreclr/src/vm/win32threadpool.cpp
src/coreclr/src/vm/win32threadpool.h

index b19544f..bcf5b58 100644 (file)
@@ -94,22 +94,6 @@ typedef enum {
     WAIT_NOTINDEADLOCK = 0x4
 }WAIT_OPTION;
 
-typedef enum ETaskType
-{
-    TT_DEBUGGERHELPER = 0x1,
-    TT_GC = 0x2,
-    TT_FINALIZER = 0x4,
-    TT_THREADPOOL_TIMER = 0x8,
-    TT_THREADPOOL_GATE = 0x10,
-    TT_THREADPOOL_WORKER = 0x20,
-    TT_THREADPOOL_IOCOMPLETION = 0x40,
-    TT_ADUNLOAD = 0x80,
-    TT_USER = 0x100,
-    TT_THREADPOOL_WAIT = 0x200,
-
-    TT_UNKNOWN = 0x80000000,
-} ETaskType;
-
 typedef enum {
     // Default to minidump
         DUMP_FLAVOR_Mini = 0,
index 2ece986..c9ddf52 100644 (file)
@@ -215,8 +215,6 @@ private:
 
     size_t              m_dwTotalAlloc;
 
-    size_t *             m_pPrivatePerfCounter_LoaderBytes;
-
     DWORD                m_Options;
 
     LoaderHeapFreeBlock *m_pFirstFreeBlock;
@@ -286,7 +284,6 @@ protected:
                        DWORD dwCommitBlockSize,
                        const BYTE* dwReservedRegionAddress,
                        SIZE_T dwReservedRegionSize,
-                       size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                        RangeList *pRangeList = NULL,
                        BOOL fMakeExecutable = FALSE);
 
@@ -441,14 +438,12 @@ private:
 public:
     LoaderHeap(DWORD dwReserveBlockSize,
                DWORD dwCommitBlockSize,
-               size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                RangeList *pRangeList = NULL,
                BOOL fMakeExecutable = FALSE
                )
       : UnlockedLoaderHeap(dwReserveBlockSize,
                            dwCommitBlockSize,
                            NULL, 0,
-                           pPrivatePerfCounter_LoaderBytes,
                            pRangeList,
                            fMakeExecutable)
     {
@@ -463,7 +458,6 @@ public:
                DWORD dwCommitBlockSize,
                const BYTE* dwReservedRegionAddress,
                SIZE_T dwReservedRegionSize,
-               size_t *pPrivatePerfCounter_LoaderBytes = NULL,
                RangeList *pRangeList = NULL,
                BOOL fMakeExecutable = FALSE
                )
@@ -471,7 +465,6 @@ public:
                            dwCommitBlockSize,
                            dwReservedRegionAddress,
                            dwReservedRegionSize,
-                           pPrivatePerfCounter_LoaderBytes,
                            pRangeList,
                            fMakeExecutable)
     {
@@ -774,12 +767,10 @@ class ExplicitControlLoaderHeap : public UnlockedLoaderHeap
 {
 #ifndef DACCESS_COMPILE
 public:
-    ExplicitControlLoaderHeap(size_t *pPrivatePerfCounter_LoaderBytes = NULL,
-                              RangeList *pRangeList = NULL,
+    ExplicitControlLoaderHeap(RangeList *pRangeList = NULL,
                               BOOL fMakeExecutable = FALSE
                )
       : UnlockedLoaderHeap(0, 0, NULL, 0,
-                           pPrivatePerfCounter_LoaderBytes,
                            pRangeList,
                            fMakeExecutable)
     {
index 79b436b..5eceabf 100644 (file)
@@ -132,22 +132,6 @@ enum __MIDL___MIDL_itf_mscoree_0000_0000_0003
         WAIT_NOTINDEADLOCK     = 0x4
     }  WAIT_OPTION;
 
-typedef 
-enum ETaskType
-    {
-        TT_DEBUGGERHELPER      = 0x1,
-        TT_GC  = 0x2,
-        TT_FINALIZER   = 0x4,
-        TT_THREADPOOL_TIMER    = 0x8,
-        TT_THREADPOOL_GATE     = 0x10,
-        TT_THREADPOOL_WORKER   = 0x20,
-        TT_THREADPOOL_IOCOMPLETION     = 0x40,
-        TT_ADUNLOAD    = 0x80,
-        TT_USER        = 0x100,
-        TT_THREADPOOL_WAIT     = 0x200,
-        TT_UNKNOWN     = 0x80000000
-    }  ETaskType;
-
 typedef /* [public] */ 
 enum __MIDL___MIDL_itf_mscoree_0000_0000_0004
     {
index e06e763..fc3def9 100644 (file)
@@ -900,7 +900,6 @@ UnlockedLoaderHeap::UnlockedLoaderHeap(DWORD dwReserveBlockSize,
                                        DWORD dwCommitBlockSize,
                                        const BYTE* dwReservedRegionAddress,
                                        SIZE_T dwReservedRegionSize,
-                                       size_t *pPrivatePerfCounter_LoaderBytes,
                                        RangeList *pRangeList,
                                        BOOL fMakeExecutable)
 {
@@ -936,8 +935,6 @@ UnlockedLoaderHeap::UnlockedLoaderHeap(DWORD dwReserveBlockSize,
     m_fStubUnwindInfoUnregistered= FALSE;
 #endif
 
-    m_pPrivatePerfCounter_LoaderBytes = pPrivatePerfCounter_LoaderBytes;
-
     m_Options                    = 0;
 
 #ifndef CROSSGEN_COMPILE
@@ -995,9 +992,6 @@ UnlockedLoaderHeap::~UnlockedLoaderHeap()
         _ASSERTE(fSuccess);
     }
 
-    if (m_pPrivatePerfCounter_LoaderBytes)
-        *m_pPrivatePerfCounter_LoaderBytes = *m_pPrivatePerfCounter_LoaderBytes - (DWORD) m_dwTotalAlloc;
-
     INDEBUG(s_dwNumInstancesOfLoaderHeaps --;)
 }
 
@@ -1146,9 +1140,6 @@ BOOL UnlockedLoaderHeap::UnlockedReservePages(size_t dwSizeToCommit)
         return FALSE;
     }
 
-    if (m_pPrivatePerfCounter_LoaderBytes)
-        *m_pPrivatePerfCounter_LoaderBytes = *m_pPrivatePerfCounter_LoaderBytes + (DWORD) dwSizeToCommit;
-
     // Record reserved range in range list, if one is specified
     // Do this AFTER the commit - otherwise we'll have bogus ranges included.
     if (m_pRangeList != NULL)
@@ -1230,9 +1221,6 @@ BOOL UnlockedLoaderHeap::GetMoreCommittedPages(size_t dwMinSize)
         if (pData == NULL)
             return FALSE;
 
-        if (m_pPrivatePerfCounter_LoaderBytes)
-            *m_pPrivatePerfCounter_LoaderBytes = *m_pPrivatePerfCounter_LoaderBytes + (DWORD) dwSizeToCommit;
-
         m_dwTotalAlloc += dwSizeToCommit;
 
         m_pPtrToEndOfCommittedRegion += dwSizeToCommit;
index 6789109..81a262d 100644 (file)
@@ -513,8 +513,6 @@ enum EEToManagedCallFlags
     MAKE_CURRENT_THREAD_AVAILABLE();                                            \
     DECLARE_CPFH_EH_RECORD(CURRENT_THREAD);                                     \
     _ASSERTE(CURRENT_THREAD);                                                   \
-    _ASSERTE(!CURRENT_THREAD->IsAbortPrevented() ||                             \
-             CURRENT_THREAD->IsAbortCheckDisabled());                           \
     _ASSERTE((CURRENT_THREAD->m_StateNC & Thread::TSNC_OwnsSpinLock) == 0);     \
     /* This bit should never be set when we call into managed code.  The */     \
     /* stack walking code explicitly clears this around any potential calls */  \
index 46fb406..cb299b4 100644 (file)
@@ -6689,22 +6689,18 @@ LoaderHeap *Module::GetThunkHeap()
     }
     CONTRACT_END
 
-        if (!m_pThunkHeap)
-        {
-            size_t * pPrivatePCLBytes = NULL;
-            size_t * pGlobalPCLBytes = NULL;
-
-            LoaderHeap *pNewHeap = new LoaderHeap(VIRTUAL_ALLOC_RESERVE_GRANULARITY, // DWORD dwReserveBlockSize
-                0,                                 // DWORD dwCommitBlockSize
-                pPrivatePCLBytes,
-                ThunkHeapStubManager::g_pManager->GetRangeList(),
-                TRUE);                             // BOOL fMakeExecutable
+    if (!m_pThunkHeap)
+    {
+        LoaderHeap *pNewHeap = new LoaderHeap(VIRTUAL_ALLOC_RESERVE_GRANULARITY, // DWORD dwReserveBlockSize
+            0,                                 // DWORD dwCommitBlockSize
+            ThunkHeapStubManager::g_pManager->GetRangeList(),
+            TRUE);                             // BOOL fMakeExecutable
 
-            if (FastInterlockCompareExchangePointer(&m_pThunkHeap, pNewHeap, 0) != 0)
-            {
-                delete pNewHeap;
-            }
+        if (FastInterlockCompareExchangePointer(&m_pThunkHeap, pNewHeap, 0) != 0)
+        {
+            delete pNewHeap;
         }
+    }
 
     RETURN m_pThunkHeap;
 }
index b0f91ce..75d2994 100644 (file)
@@ -1635,15 +1635,6 @@ part2:
                     _ASSERTE(!"EE Shutting down after an assert");
 #endif
 
-
-#ifdef LOGGING
-                extern unsigned FcallTimeHist[11];
-#endif
-                LOG((LF_STUBS, LL_INFO10, "FcallHist %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
-                    FcallTimeHist[0], FcallTimeHist[1], FcallTimeHist[2], FcallTimeHist[3],
-                    FcallTimeHist[4], FcallTimeHist[5], FcallTimeHist[6], FcallTimeHist[7],
-                    FcallTimeHist[8], FcallTimeHist[9], FcallTimeHist[10]));
-
                 WriteJitHelperCountToSTRESSLOG();
 
                 STRESS_LOG0(LF_STARTUP, LL_INFO10, "EEShutdown shutting down logging");
index 5962746..edc74cd 100644 (file)
@@ -1953,9 +1953,8 @@ void CodeFragmentHeap::RealBackoutMem(void *pMem
 
 //**************************************************************************
 
-LoaderCodeHeap::LoaderCodeHeap(size_t * pPrivatePCLBytes)
-    : m_LoaderHeap(pPrivatePCLBytes,
-                   0,                       // RangeList *pRangeList
+LoaderCodeHeap::LoaderCodeHeap()
+    : m_LoaderHeap(NULL,                    // RangeList *pRangeList
                    TRUE),                   // BOOL fMakeExecutable
     m_cbMinNextPad(0)
 {
@@ -2133,7 +2132,6 @@ HeapList* LoaderCodeHeap::CreateCodeHeap(CodeHeapRequestInfo *pInfo, LoaderHeap
         POSTCONDITION((RETVAL != NULL) || !pInfo->getThrowOnOutOfMemoryWithinRange());
     } CONTRACT_END;
 
-    size_t * pPrivatePCLBytes   = NULL;
     size_t   reserveSize        = pInfo->getReserveSize();
     size_t   initialRequestSize = pInfo->getRequestSize();
     const BYTE *   loAddr       = pInfo->m_loAddr;
@@ -2146,16 +2144,12 @@ HeapList* LoaderCodeHeap::CreateCodeHeap(CodeHeapRequestInfo *pInfo, LoaderHeap
         EEPOLICY_HANDLE_FATAL_ERROR(COR_E_EXECUTIONENGINE);
     }
 
-#ifdef ENABLE_PERF_COUNTERS
-    pPrivatePCLBytes   = &(GetPerfCounters().m_Loading.cbLoaderHeapSize);
-#endif
-
     LOG((LF_JIT, LL_INFO100,
          "Request new LoaderCodeHeap::CreateCodeHeap(%08x, %08x, for loader allocator" FMT_ADDR "in" FMT_ADDR ".." FMT_ADDR ")\n",
          (DWORD) reserveSize, (DWORD) initialRequestSize, DBG_ADDR(pInfo->m_pAllocator), DBG_ADDR(loAddr), DBG_ADDR(hiAddr)
                                 ));
 
-    NewHolder<LoaderCodeHeap> pCodeHeap(new LoaderCodeHeap(pPrivatePCLBytes));
+    NewHolder<LoaderCodeHeap> pCodeHeap(new LoaderCodeHeap());
 
     BYTE * pBaseAddr = NULL;
     DWORD dwSizeAcquiredFromInitialBlock = 0;
index d6ed519..009c88f 100644 (file)
@@ -511,7 +511,7 @@ private:
     ExplicitControlLoaderHeap m_LoaderHeap;
     SSIZE_T m_cbMinNextPad;
 
-    LoaderCodeHeap(size_t * pPrivatePCLBytes);
+    LoaderCodeHeap();
 
 public:
     static HeapList* CreateCodeHeap(CodeHeapRequestInfo *pInfo, LoaderHeap *pJitMetaHeap);
index 595e878..12e8a93 100644 (file)
@@ -264,7 +264,6 @@ FCIMPL0(FC_BOOL_RET, ThreadPoolNative::NotifyRequestComplete)
 
     bool needReset =
         priority != ThreadNative::PRIORITY_NORMAL ||
-        pThread->HasThreadStateNC(Thread::TSNC_SOWorkNeeded) ||
         !pThread->IsBackground();
 
     bool shouldAdjustWorkers = ThreadpoolMgr::ShouldAdjustMaxWorkersActive();
index d1907ce..c7ad7c7 100644 (file)
@@ -1206,44 +1206,8 @@ HRESULT CorHost2::CreateObject(REFIID riid, void **ppUnk)
     return (hr);
 }
 
-
-//-----------------------------------------------------------------------------
-// MapFile - Maps a file into the runtime in a non-standard way
-//-----------------------------------------------------------------------------
-
-static PEImage *MapFileHelper(HANDLE hFile)
-{
-    CONTRACTL
-    {
-        THROWS;
-        GC_TRIGGERS;
-        MODE_ANY;
-    }
-    CONTRACTL_END;
-
-    GCX_PREEMP();
-
-    HandleHolder hFileMap(WszCreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL));
-    if (hFileMap == NULL)
-        ThrowLastError();
-
-    CLRMapViewHolder base(CLRMapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0));
-    if (base == NULL)
-        ThrowLastError();
-
-    DWORD dwSize = SafeGetFileSize(hFile, NULL);
-    if (dwSize == 0xffffffff && GetLastError() != NOERROR)
-    {
-        ThrowLastError();
-    }
-    PEImageHolder pImage(PEImage::LoadFlat(base, dwSize));
-    return pImage.Extract();
-}
-
 LONG CorHost2::m_RefCount = 0;
 
-static Volatile<BOOL> fOneOnly = 0;
-
 ///////////////////////////////////////////////////////////////////////////////
 // ICLRRuntimeHost::SetHostControl
 ///////////////////////////////////////////////////////////////////////////////
@@ -1259,20 +1223,6 @@ HRESULT CorHost2::GetCLRControl(ICLRControl** pCLRControl)
     return E_NOTIMPL;
 }
 
-void GetProcessMemoryLoad(LPMEMORYSTATUSEX pMSEX)
-{
-    CONTRACTL
-    {
-        NOTHROW;
-        GC_NOTRIGGER;
-    }
-    CONTRACTL_END;
-
-    pMSEX->dwLength = sizeof(MEMORYSTATUSEX);
-    BOOL fRet = GlobalMemoryStatusEx(pMSEX);
-    _ASSERTE (fRet);
-}
-
 // This is the instance that exposes interfaces out to all the other DLLs of the CLR
 // so they can use our services for TLS, synchronization, memory allocation, etc.
 static BYTE g_CEEInstance[sizeof(CExecutionEngine)];
index 1e66d09..0a30958 100644 (file)
@@ -891,8 +891,6 @@ void DomainFile::LoadLibrary()
     }
     CONTRACTL_END;
 
-    Thread::LoadingFileHolder holder(GetThread());
-    GetThread()->SetLoadingFile(this);
     GetFile()->LoadLibrary();
 }
 
index ba779c8..cb60e23 100644 (file)
@@ -2498,7 +2498,7 @@ CLRUnwindStatus ExceptionTracker::ProcessManagedCallFrame(
 
     // Doing rude abort.  Skip all non-constrained execution region code.
     // When rude abort is initiated, we cannot intercept any exceptions.
-    if ((pThread->IsRudeAbortInitiated() && !pThread->IsWithinCer(pcfThisFrame)))
+    if (pThread->IsRudeAbortInitiated())
     {
         // If we are unwinding to find the real resume frame, then we cannot ignore frames yet.
         // We need to make sure we find the correct resume frame before starting to ignore frames.
@@ -3030,7 +3030,7 @@ CLRUnwindStatus ExceptionTracker::ProcessManagedCallFrame(
                             pThread->m_dwIndexClauseForCatch = dwPreFilterTACatchHandlerClauseIndex;
                             pThread->m_sfEstablisherOfActualHandlerFrame = sfPreFilterEstablisherOfActualHandlerFrame;
 
-                            if (pThread->IsRudeAbortInitiated() && !pThread->IsWithinCer(pcfThisFrame))
+                            if (pThread->IsRudeAbortInitiated())
                             {
                                 EH_LOG((LL_INFO100, "  IGNOREFRAME: rude abort\n"));
                                 goto lExit;
index 70101ac..3b037d6 100644 (file)
@@ -102,48 +102,6 @@ void ThreadExceptionState::FreeAllStackTraces()
     }
 }
 
-void ThreadExceptionState::ClearThrowablesForUnload(IGCHandleStore* handleStore)
-{
-    WRAPPER_NO_CONTRACT;
-
-#ifdef FEATURE_EH_FUNCLETS
-    ExceptionTracker* pNode = m_pCurrentTracker;
-#else // FEATURE_EH_FUNCLETS
-    ExInfo*           pNode = &m_currentExInfo;
-#endif // FEATURE_EH_FUNCLETS
-
-    for ( ;
-          pNode != NULL;
-          pNode = pNode->m_pPrevNestedInfo)
-    {
-        if (handleStore->ContainsHandle(pNode->m_hThrowable))
-        {
-            pNode->DestroyExceptionHandle();
-        }
-    }
-}
-
-
-// After unwinding from an SO, there may be stale exception state.
-void ThreadExceptionState::ClearExceptionStateAfterSO(void* pStackFrameSP)
-{
-    WRAPPER_NO_CONTRACT;
-
-    #if defined(FEATURE_EH_FUNCLETS)
-        ExceptionTracker::PopTrackers(pStackFrameSP);
-    #else
-        // After unwinding from an SO, there may be stale exception state.  We need to
-        //  get rid of any state that assumes the handlers that have been unwound/unlinked.
-        //
-        // Because the ExState chains to entries that may be on the stack, and the
-        //  stack has been unwound, it may not be safe to reference any entries
-        //  other than the one of the Thread object.
-        //
-        // Consequently, we will simply Init() the ExInfo on the Thread object.
-        m_currentExInfo.Init();
-    #endif
-} // void ThreadExceptionState::ClearExceptionStateAfterSO()
-
 OBJECTREF ThreadExceptionState::GetThrowable()
 {
     CONTRACTL
index bb920ec..ba89ab3 100644 (file)
@@ -55,7 +55,6 @@ class ThreadExceptionState
 public:
 
     void FreeAllStackTraces();
-    void ClearThrowablesForUnload(IGCHandleStore* handleStore);
 
 #ifdef _DEBUG
     typedef enum
@@ -103,9 +102,6 @@ public:
     void EnumChainMemoryRegions(CLRDataEnumMemoryFlags flags);
 #endif // DACCESS_COMPILE
 
-    // After unwinding from an SO, there may be stale exception state.
-    void ClearExceptionStateAfterSO(void* pStackFrameSP);
-
     enum ThreadExceptionFlag
     {
         TEF_None                          = 0x00000000,
index c0f0466..344b04a 100644 (file)
@@ -148,12 +148,6 @@ NOINLINE Object* FC_GCPoll(void* __me, Object* objToProtect)
     return objToProtect;
 }
 
-#ifdef _DEBUG
-
-unsigned FcallTimeHist[11];
-
-#endif
-
 #ifdef ENABLE_CONTRACTS
 
 /**************************************************************************************/
index d7e6748..aa46457 100644 (file)
@@ -98,6 +98,15 @@ bool InitLargePagesPrivilege()
 
 #endif // FEATURE_PAL
 
+static void GetProcessMemoryLoad(LPMEMORYSTATUSEX pMSEX)
+{
+    LIMITED_METHOD_CONTRACT;
+
+    pMSEX->dwLength = sizeof(MEMORYSTATUSEX);
+    BOOL fRet = GlobalMemoryStatusEx(pMSEX);
+    _ASSERTE(fRet);
+}
+
 // Initialize the interface implementation
 // Return:
 //  true if it has succeeded, false if it has failed
@@ -620,7 +629,7 @@ size_t GCToOSInterface::GetVirtualMemoryLimit()
     LIMITED_METHOD_CONTRACT;
 
     MEMORYSTATUSEX memStatus;
-    ::GetProcessMemoryLoad(&memStatus);
+    GetProcessMemoryLoad(&memStatus);
 
     return (size_t)memStatus.ullTotalVirtual;
 }
@@ -711,7 +720,7 @@ static size_t GetRestrictedPhysicalMemoryLimit()
                 job_physical_memory_limit = min (job_physical_memory_limit, job_workingset_limit);
 
                 MEMORYSTATUSEX ms;
-                ::GetProcessMemoryLoad(&ms);
+                GetProcessMemoryLoad(&ms);
                 total_virtual = ms.ullTotalVirtual;
                 total_physical = ms.ullAvailPhys;
 
@@ -738,7 +747,7 @@ exit:
     if (total_virtual == 0)
     {
         MEMORYSTATUSEX ms;
-        ::GetProcessMemoryLoad(&ms);
+        GetProcessMemoryLoad(&ms);
 
         total_virtual = ms.ullTotalVirtual;
         total_physical = ms.ullTotalPhys;
@@ -783,7 +792,6 @@ static size_t GetRestrictedPhysicalMemoryLimit()
 }
 #endif // FEATURE_PAL
 
-
 // Get the physical memory that this process can use.
 // Return:
 //  non zero if it has succeeded, 0 if it has failed
@@ -811,7 +819,7 @@ uint64_t GCToOSInterface::GetPhysicalMemoryLimit(bool* is_restricted)
     }
 
     MEMORYSTATUSEX memStatus;
-    ::GetProcessMemoryLoad(&memStatus);
+    GetProcessMemoryLoad(&memStatus);
 
     return memStatus.ullTotalPhys;
 }
@@ -865,7 +873,7 @@ void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available
     }
 
     MEMORYSTATUSEX ms;
-    ::GetProcessMemoryLoad(&ms);
+    GetProcessMemoryLoad(&ms);
 
 #ifndef FEATURE_PAL
     if (g_UseRestrictedVirtualMemory)
index 4deda5c..da0dc4f 100644 (file)
@@ -2291,7 +2291,7 @@ StackWalkAction COMPlusThrowCallback(       // SWA value
     if (!pFunc)
         return SWA_CONTINUE;
 
-    if (pThread->IsRudeAbortInitiated() && !pThread->IsWithinCer(pCf))
+    if (pThread->IsRudeAbortInitiated())
     {
         return SWA_CONTINUE;
     }
@@ -2638,7 +2638,7 @@ StackWalkAction COMPlusThrowCallback(       // SWA value
 
             pExInfo->m_EHClauseInfo.ResetInfo();
 
-            if (pThread->IsRudeAbortInitiated() && !pThread->IsWithinCer(pCf))
+            if (pThread->IsRudeAbortInitiated())
             {
                 if (fGiveDebuggerAndProfilerNotification)
                     EEToProfilerExceptionInterfaceWrapper::ExceptionSearchFunctionLeave(pFunc);
@@ -2737,7 +2737,7 @@ StackWalkAction COMPlusUnwindCallback (CrawlFrame *pCf, ThrowCallbackType *pData
     Thread *pThread = GetThread();
 
     // If the thread is being RudeAbort, we will not run any finally
-    if (pThread->IsRudeAbortInitiated() && !pThread->IsWithinCer(pCf))
+    if (pThread->IsRudeAbortInitiated())
     {
         return SWA_CONTINUE;
     }
index 72ec352..6a3ee28 100644 (file)
 #endif
 #include "comcallablewrapper.h"
 
-//*****************************************************************************
-// Used by LoaderAllocator::Init for easier readability.
-#ifdef ENABLE_PERF_COUNTERS
-#define LOADERHEAP_PROFILE_COUNTER (&(GetPerfCounters().m_Loading.cbLoaderHeapSize))
-#else
-#define LOADERHEAP_PROFILE_COUNTER (NULL)
-#endif
-
 #ifndef CROSSGEN_COMPILE
 #define STUBMANAGER_RANGELIST(stubManager) (stubManager::g_pManager->GetRangeList())
 #else
@@ -1156,8 +1148,7 @@ void LoaderAllocator::Init(BaseDomain *pDomain, BYTE *pExecutableHeapMemory)
         m_pLowFrequencyHeap = new (&m_LowFreqHeapInstance) LoaderHeap(LOW_FREQUENCY_HEAP_RESERVE_SIZE,
                                                                       LOW_FREQUENCY_HEAP_COMMIT_SIZE,
                                                                       initReservedMem,
-                                                                      dwLowFrequencyHeapReserveSize,
-                                                                      LOADERHEAP_PROFILE_COUNTER);
+                                                                      dwLowFrequencyHeapReserveSize);
         initReservedMem += dwLowFrequencyHeapReserveSize;
     }
 
@@ -1169,7 +1160,6 @@ void LoaderAllocator::Init(BaseDomain *pDomain, BYTE *pExecutableHeapMemory)
                                                                       STUB_HEAP_COMMIT_SIZE,
                                                                       initReservedMem,
                                                                       dwExecutableHeapReserveSize,
-                                                                      LOADERHEAP_PROFILE_COUNTER,
                                                                       NULL,
                                                                       TRUE /* Make heap executable */
                                                                       );
@@ -1179,8 +1169,7 @@ void LoaderAllocator::Init(BaseDomain *pDomain, BYTE *pExecutableHeapMemory)
     m_pHighFrequencyHeap = new (&m_HighFreqHeapInstance) LoaderHeap(HIGH_FREQUENCY_HEAP_RESERVE_SIZE,
                                                                     HIGH_FREQUENCY_HEAP_COMMIT_SIZE,
                                                                     initReservedMem,
-                                                                    dwHighFrequencyHeapReserveSize,
-                                                                    LOADERHEAP_PROFILE_COUNTER);
+                                                                    dwHighFrequencyHeapReserveSize);
     initReservedMem += dwHighFrequencyHeapReserveSize;
 
     if (IsCollectible())
@@ -1194,7 +1183,6 @@ void LoaderAllocator::Init(BaseDomain *pDomain, BYTE *pExecutableHeapMemory)
                                                        STUB_HEAP_COMMIT_SIZE,
                                                        initReservedMem,
                                                        dwStubHeapReserveSize,
-                                                       LOADERHEAP_PROFILE_COUNTER,
                                                        STUBMANAGER_RANGELIST(StubLinkStubManager),
                                                        TRUE /* Make heap executable */);
 
index d0323ab..9879443 100644 (file)
@@ -702,22 +702,18 @@ LoaderHeap *PEImage::IJWFixupData::GetThunkHeap()
     }
     CONTRACT_END
 
-        if (!m_DllThunkHeap)
-        {
-            size_t * pPrivatePCLBytes = NULL;
-            size_t * pGlobalPCLBytes = NULL;
-
-            LoaderHeap *pNewHeap = new LoaderHeap(VIRTUAL_ALLOC_RESERVE_GRANULARITY, // DWORD dwReserveBlockSize
-                0,                                 // DWORD dwCommitBlockSize
-                pPrivatePCLBytes,
-                ThunkHeapStubManager::g_pManager->GetRangeList(),
-                TRUE);                             // BOOL fMakeExecutable
+    if (!m_DllThunkHeap)
+    {
+        LoaderHeap *pNewHeap = new LoaderHeap(VIRTUAL_ALLOC_RESERVE_GRANULARITY, // DWORD dwReserveBlockSize
+            0,                                 // DWORD dwCommitBlockSize
+            ThunkHeapStubManager::g_pManager->GetRangeList(),
+            TRUE);                             // BOOL fMakeExecutable
 
-            if (FastInterlockCompareExchangePointer((PVOID*)&m_DllThunkHeap, (VOID*)pNewHeap, (VOID*)0) != 0)
-            {
-                delete pNewHeap;
-            }
+        if (FastInterlockCompareExchangePointer((PVOID*)&m_DllThunkHeap, (VOID*)pNewHeap, (VOID*)0) != 0)
+        {
+            delete pNewHeap;
         }
+    }
 
     RETURN m_DllThunkHeap;
 }
index 5c44f09..9affaf7 100644 (file)
@@ -529,8 +529,6 @@ DWORD Thread::StartThread()
 LONG    Thread::m_DebugWillSyncCount = -1;
 LONG    Thread::m_DetachCount = 0;
 LONG    Thread::m_ActiveDetachCount = 0;
-int     Thread::m_offset_counter = 0;
-Volatile<LONG> Thread::m_threadsAtUnsafePlaces = 0;
 
 //-------------------------------------------------------------------------
 // Public function: SetupThreadNoThrow()
@@ -852,8 +850,6 @@ void DestroyThread(Thread *th)
 
     _ASSERTE(g_fEEShutDown || th->m_dwLockCount == 0 || th->m_fRudeAborted);
 
-    th->FinishSOWork();
-
     GCX_PREEMP_NO_DTOR();
 
     if (th->IsAbortRequested()) {
@@ -944,8 +940,6 @@ HRESULT Thread::DetachThread(BOOL fDLLThreadDetach)
 
     _ASSERTE (this == GetThread());
 
-    FinishSOWork();
-
     FastInterlockIncrement(&Thread::m_DetachCount);
 
     if (IsAbortRequested()) {
@@ -1437,8 +1431,6 @@ Thread::Thread()
 
     m_RequestedStackSize = 0;
     m_PreventAsync = 0;
-    m_PreventAbort = 0;
-    m_nNestedMarshalingExceptions = 0;
     m_pDomain = NULL;
 #ifdef FEATURE_COMINTEROP
     m_fDisableComObjectEagerCleanup = false;
@@ -1449,7 +1441,6 @@ Thread::Thread()
     m_OSContext = NULL;
     m_ThreadTasks = (ThreadTasks)0;
     m_pLoadLimiter= NULL;
-    m_pLoadingFile = NULL;
 
     // The state and the tasks must be 32-bit aligned for atomicity to be guaranteed.
     _ASSERTE((((size_t) &m_State) & 3) == 0);
@@ -1523,9 +1514,6 @@ Thread::Thread()
     SetProfilerCallbacksAllowed(TRUE);
 
     m_pCreatingThrowableForException = NULL;
-#ifdef _DEBUG
-    m_dwDisableAbortCheckCount = 0;
-#endif // _DEBUG
 
 #ifdef FEATURE_EH_FUNCLETS
     m_dwIndexClauseForCatch = 0;
@@ -2071,28 +2059,6 @@ BOOL Thread::CreateNewThread(SIZE_T stackSize, LPTHREAD_START_ROUTINE start, voi
     return bRet;
 }
 
-
-// This is to avoid the 64KB/1MB aliasing problem present on Pentium 4 processors,
-// which can significantly impact performance with HyperThreading enabled
-DWORD WINAPI Thread::intermediateThreadProc(PVOID arg)
-{
-    WRAPPER_NO_CONTRACT;
-
-    m_offset_counter++;
-    if (m_offset_counter * offset_multiplier > (int) GetOsPageSize())
-        m_offset_counter = 0;
-
-    (void)_alloca(m_offset_counter * offset_multiplier);
-
-    intermediateThreadParam* param = (intermediateThreadParam*)arg;
-
-    LPTHREAD_START_ROUTINE ThreadFcnPtr = param->lpThreadFunction;
-    PVOID args = param->lpArg;
-    delete param;
-
-    return ThreadFcnPtr(args);
-}
-
 HANDLE Thread::CreateUtilityThread(Thread::StackSizeBucket stackSizeBucket, LPTHREAD_START_ROUTINE start, void *args, LPCWSTR pName, DWORD flags, DWORD* pThreadId)
 {
     LIMITED_METHOD_CONTRACT;
@@ -2268,13 +2234,6 @@ BOOL Thread::CreateNewOSThread(SIZE_T sizeToCommitOrReserve, LPTHREAD_START_ROUT
     }
 #endif // !FEATURE_PAL
 
-    intermediateThreadParam* lpThreadArgs = new (nothrow) intermediateThreadParam;
-    if (lpThreadArgs == NULL)
-    {
-        return FALSE;
-    }
-    NewHolder<intermediateThreadParam> argHolder(lpThreadArgs);
-
     // Make sure we have all our handles, in case someone tries to suspend us
     // as we are starting up.
     if (!AllocHandles())
@@ -2283,25 +2242,20 @@ BOOL Thread::CreateNewOSThread(SIZE_T sizeToCommitOrReserve, LPTHREAD_START_ROUT
         return FALSE;
     }
 
-    lpThreadArgs->lpThreadFunction = start;
-    lpThreadArgs->lpArg = args;
-
 #ifdef FEATURE_PAL
     h = ::PAL_CreateThread64(NULL     /*=SECURITY_ATTRIBUTES*/,
 #else
     h = ::CreateThread(      NULL     /*=SECURITY_ATTRIBUTES*/,
 #endif
                              sizeToCommitOrReserve,
-                             intermediateThreadProc,
-                             lpThreadArgs,
+                             start,
+                             args,
                              dwCreationFlags,
                              &ourId);
 
     if (h == NULL)
         return FALSE;
 
-    argHolder.SuppressRelease();
-
     _ASSERTE(!m_fPreemptiveGCDisabled);     // leave in preemptive until HasStarted.
 
     SetThreadHandle(h);
@@ -3354,12 +3308,6 @@ void Thread::DoAppropriateWaitWorkerAlertableHelper(WaitMode mode)
     }
     CONTRACTL_END;
 
-    // If thread abort is prevented, we do not want this thread to see thread abort and thread interrupt exception.
-    if (IsAbortPrevented())
-    {
-        return;
-    }
-
     // A word about ordering for Interrupt.  If someone tries to interrupt a thread
     // that's in the interruptible state, we queue an APC.  But if they try to interrupt
     // a thread that's not in the interruptible state, we just record that fact.  So
@@ -7078,8 +7026,6 @@ VOID Thread::RestoreGuardPage()
         }
     }
 
-    FinishSOWork();
-
     INDEBUG(DebugLogStackMBIs());
 
     return;
@@ -8126,8 +8072,6 @@ void Thread::InternalReset(BOOL fNotFinalizerThread, BOOL fThreadObjectResetNeed
 
     _ASSERTE (this == GetThread());
 
-    FinishSOWork();
-
     INT32 nPriority = ThreadNative::PRIORITY_NORMAL;
 
     if (!fNotFinalizerThread && this == FinalizerThread::GetFinalizerThread())
@@ -8165,57 +8109,6 @@ void Thread::InternalReset(BOOL fNotFinalizerThread, BOOL fThreadObjectResetNeed
     }
 }
 
-ETaskType GetCurrentTaskType()
-{
-    STATIC_CONTRACT_NOTHROW;
-    STATIC_CONTRACT_GC_NOTRIGGER;
-
-    ETaskType TaskType = TT_UNKNOWN;
-    size_t type = (size_t)ClrFlsGetValue (TlsIdx_ThreadType);
-    if (type & ThreadType_DbgHelper)
-    {
-        TaskType = TT_DEBUGGERHELPER;
-    }
-    else if (type & ThreadType_GC)
-    {
-        TaskType = TT_GC;
-    }
-    else if (type & ThreadType_Finalizer)
-    {
-        TaskType = TT_FINALIZER;
-    }
-    else if (type & ThreadType_Timer)
-    {
-        TaskType = TT_THREADPOOL_TIMER;
-    }
-    else if (type & ThreadType_Gate)
-    {
-        TaskType = TT_THREADPOOL_GATE;
-    }
-    else if (type & ThreadType_Wait)
-    {
-        TaskType = TT_THREADPOOL_WAIT;
-    }
-    else if (type & ThreadType_Threadpool_IOCompletion)
-    {
-        TaskType = TT_THREADPOOL_IOCOMPLETION;
-    }
-    else if (type & ThreadType_Threadpool_Worker)
-    {
-        TaskType = TT_THREADPOOL_WORKER;
-    }
-    else
-    {
-        Thread *pThread = GetThread();
-        if (pThread)
-        {
-            TaskType = TT_USER;
-        }
-    }
-
-    return TaskType;
-}
-
 DeadlockAwareLock::DeadlockAwareLock(const char *description)
   : m_pHoldingThread(NULL)
 #ifdef _DEBUG
index 6292804..11db798 100644 (file)
@@ -326,12 +326,6 @@ public:
         return (BYTE)ofs;
     }
 
-    void SetLoadingFile(DomainFile *pFile)
-    {
-    }
-
-    typedef Holder<Thread *, DoNothing, DoNothing> LoadingFileHolder;
-
     enum ThreadState
     {
     };
@@ -1172,7 +1166,7 @@ public:
         TSNC_WaitUntilGCFinished        = 0x00000010, // The current thread is waiting for GC.  If host returns
                                                       // SO during wait, we will either spin or make GC wait.
         TSNC_BlockedForShutdown         = 0x00000020, // Thread is blocked in WaitForEndOfShutdown.  We should not hit WaitForEndOfShutdown again.
-        TSNC_SOWorkNeeded               = 0x00000040, // The thread needs to wake up AD unload helper thread to finish SO work
+        // unused                       = 0x00000040,
         TSNC_CLRCreatedThread           = 0x00000080, // The thread was created through Thread::CreateNewThread
         TSNC_ExistInThreadStore         = 0x00000100, // For dtor to know if it needs to be removed from ThreadStore
         TSNC_UnsafeSkipEnterCooperative = 0x00000200, // This is a "fix" for deadlocks caused when cleaning up COM
@@ -1187,8 +1181,7 @@ public:
                                                       // After the thread is interrupted once, we turn off interruption
                                                       // at the beginning of wait.
         // unused                       = 0x00040000,
-        TSNC_CannotRecycle              = 0x00080000, // A host can not recycle this Thread object.  When a thread
-                                                      // has orphaned lock, we will apply this.
+        // 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:
@@ -1477,8 +1470,6 @@ public:
     static LONG     m_DetachCount;
     static LONG     m_ActiveDetachCount;  // Count how many non-background detached
 
-    static Volatile<LONG>     m_threadsAtUnsafePlaces;
-
     // Offsets for the following variables need to fit in 1 byte, so keep near
     // the top of the object.  Also, we want cache line filling to work for us
     // so the critical stuff is ordered based on frequency of use.
@@ -3142,29 +3133,6 @@ public:
 
     typedef StateHolder<Thread::IncPreventAsync, Thread::DecPreventAsync> ThreadPreventAsyncHolder;
 
-    // During a <clinit>, this thread must not be asynchronously
-    // stopped or interrupted.  That would leave the class unavailable
-    // and is therefore a security hole.
-    static void        IncPreventAbort()
-    {
-        WRAPPER_NO_CONTRACT;
-        Thread *pThread = GetThread();
-        FastInterlockIncrement((LONG*)&pThread->m_PreventAbort);
-    }
-    static void        DecPreventAbort()
-    {
-        WRAPPER_NO_CONTRACT;
-        Thread *pThread = GetThread();
-        FastInterlockDecrement((LONG*)&pThread->m_PreventAbort);
-    }
-
-    BOOL IsAbortPrevented()
-    {
-        return m_PreventAbort != 0;
-    }
-
-    typedef StateHolder<Thread::IncPreventAbort, Thread::DecPreventAbort> ThreadPreventAbortHolder;
-
     // The ThreadStore manages a list of all the threads in the system.  I
     // can't figure out how to expand the ThreadList template type without
     // making m_Link public.
@@ -3912,14 +3880,6 @@ public:
     }
 #endif // !DACCESS_COMPILE
 
-private:
-
-    //-------------------------------------------------------------------------
-    // Support creation of assemblies in DllMain (see ceemain.cpp)
-    //-------------------------------------------------------------------------
-    DomainFile* m_pLoadingFile;
-
-
 public:
 
     void SetInteropDebuggingHijacked(BOOL f)
@@ -4031,25 +3991,6 @@ public:
     typedef ConditionalStateHolder<Thread *, Thread::EnterHijackLock, Thread::LeaveHijackLock> HijackLockHolder;
     //-------------------------------------------------------------------------
 
-    static bool ThreadsAtUnsafePlaces(void)
-    {
-        LIMITED_METHOD_CONTRACT;
-
-        return (m_threadsAtUnsafePlaces != (LONG)0);
-    }
-
-    static void IncThreadsAtUnsafePlaces(void)
-    {
-        LIMITED_METHOD_CONTRACT;
-        InterlockedIncrement(&m_threadsAtUnsafePlaces);
-    }
-
-    static void DecThreadsAtUnsafePlaces(void)
-    {
-        LIMITED_METHOD_CONTRACT;
-        InterlockedDecrement(&m_threadsAtUnsafePlaces);
-    }
-
     void PrepareForEERestart(BOOL SuspendSucceeded)
     {
         WRAPPER_NO_CONTRACT;
@@ -4071,69 +4012,13 @@ public:
     static LPVOID GetStaticFieldAddress(FieldDesc *pFD);
     TADDR GetStaticFieldAddrNoCreate(FieldDesc *pFD);
 
-    void SetLoadingFile(DomainFile *pFile)
-    {
-        LIMITED_METHOD_CONTRACT;
-        CONSISTENCY_CHECK(m_pLoadingFile == NULL);
-        m_pLoadingFile = pFile;
-    }
-
-    void ClearLoadingFile()
-    {
-        LIMITED_METHOD_CONTRACT;
-        m_pLoadingFile = NULL;
-    }
-
-    DomainFile *GetLoadingFile()
-    {
-        LIMITED_METHOD_CONTRACT;
-        return m_pLoadingFile;
-    }
-
-private:
-    static void LoadingFileRelease(Thread *pThread)
-    {
-        WRAPPER_NO_CONTRACT;
-        pThread->ClearLoadingFile();
-    }
-
-public:
-     typedef Holder<Thread *, DoNothing, Thread::LoadingFileRelease> LoadingFileHolder;
-
 private:
     // Don't allow a thread to be asynchronously stopped or interrupted (e.g. because
     // it is performing a <clinit>)
     int         m_PreventAsync;
-    int         m_PreventAbort;
-    int         m_nNestedMarshalingExceptions;
-    BOOL IsMarshalingException()
-    {
-        LIMITED_METHOD_CONTRACT;
-        return (m_nNestedMarshalingExceptions != 0);
-    }
-    int StartedMarshalingException()
-    {
-        LIMITED_METHOD_CONTRACT;
-        return m_nNestedMarshalingExceptions++;
-    }
-    void FinishedMarshalingException()
-    {
-        LIMITED_METHOD_CONTRACT;
-        _ASSERTE(m_nNestedMarshalingExceptions > 0);
-        m_nNestedMarshalingExceptions--;
-    }
 
     static LONG m_DebugWillSyncCount;
 
-    // IP cache used by QueueCleanupIP.
-    #define CLEANUP_IPS_PER_CHUNK 4
-    struct CleanupIPs {
-        IUnknown    *m_Slots[CLEANUP_IPS_PER_CHUNK];
-        CleanupIPs  *m_Next;
-        CleanupIPs() {LIMITED_METHOD_CONTRACT; memset(this, 0, sizeof(*this)); }
-    };
-    CleanupIPs   m_CleanupIPs;
-
 #define BEGIN_FORBID_TYPELOAD() _ASSERTE_IMPL((GetThreadNULLOk() == 0) || ++GetThreadNULLOk()->m_ulForbidTypeLoad)
 #define END_FORBID_TYPELOAD()   _ASSERTE_IMPL((GetThreadNULLOk() == 0) || GetThreadNULLOk()->m_ulForbidTypeLoad--)
 #define TRIGGERS_TYPELOAD()     _ASSERTE_IMPL((GetThreadNULLOk() == 0) || !GetThreadNULLOk()->m_ulForbidTypeLoad)
@@ -4321,21 +4206,6 @@ public:
     // Is the current thread currently executing within a constrained execution region?
     static BOOL IsExecutingWithinCer();
 
-    // Determine whether the method at the given frame in the thread's execution stack is executing within a CER.
-    BOOL IsWithinCer(CrawlFrame *pCf);
-
-private:
-    // used to pad stack on thread creation to avoid aliasing penalty in P4 HyperThread scenarios
-
-    static DWORD WINAPI intermediateThreadProc(PVOID arg);
-    static int m_offset_counter;
-    static const int offset_multiplier = 128;
-
-    typedef struct {
-        LPTHREAD_START_ROUTINE  lpThreadFunction;
-        PVOID lpArg;
-    } intermediateThreadParam;
-
 #ifdef _DEBUG
 // when the thread is doing a stressing GC, some Crst violation could be ignored, by a non-elegant solution.
 private:
@@ -4626,43 +4496,6 @@ private:
 
     typedef ConditionalStateHolder<Thread *, Thread::EnterWorkingOnThreadContext, Thread::LeaveWorkingOnThreadContext> WorkingOnThreadContextHolder;
 
-public:
-    void PrepareThreadForSOWork()
-    {
-        WRAPPER_NO_CONTRACT;
-
-#ifdef FEATURE_HIJACK
-        UnhijackThread();
-#endif // FEATURE_HIJACK
-
-        ResetThrowControlForThread();
-
-        // Since this Thread has taken an SO, there may be state left-over after we
-        // short-circuited exception or other error handling, and so we don't want
-        // to risk recycling it.
-        SetThreadStateNC(TSNC_CannotRecycle);
-    }
-
-    void SetSOWorkNeeded()
-    {
-        SetThreadStateNC(TSNC_SOWorkNeeded);
-    }
-
-    BOOL IsSOWorkNeeded()
-    {
-        return HasThreadStateNC(TSNC_SOWorkNeeded);
-    }
-
-    void FinishSOWork();
-
-    void ClearExceptionStateAfterSO(void* pStackFrameSP)
-    {
-        WRAPPER_NO_CONTRACT;
-
-        // Clear any stale exception state.
-        m_ExceptionState.ClearExceptionStateAfterSO(pStackFrameSP);
-    }
-
 private:
     BOOL m_fAllowProfilerCallbacks;
 
@@ -4734,34 +4567,6 @@ private:
     Exception *m_pCreatingThrowableForException;
     friend OBJECTREF CLRException::GetThrowable();
 
-#ifdef _DEBUG
-private:
-    int m_dwDisableAbortCheckCount; // Disable check before calling managed code.
-                                    // !!! Use this very carefully.  If managed code runs user code
-                                    // !!! or blocks on locks, the thread may not be aborted.
-public:
-    static void        DisableAbortCheck()
-    {
-        WRAPPER_NO_CONTRACT;
-        Thread *pThread = GetThread();
-        FastInterlockIncrement((LONG*)&pThread->m_dwDisableAbortCheckCount);
-    }
-    static void        EnableAbortCheck()
-    {
-        WRAPPER_NO_CONTRACT;
-        Thread *pThread = GetThread();
-        _ASSERTE (pThread->m_dwDisableAbortCheckCount > 0);
-        FastInterlockDecrement((LONG*)&pThread->m_dwDisableAbortCheckCount);
-    }
-
-    BOOL IsAbortCheckDisabled()
-    {
-        return m_dwDisableAbortCheckCount > 0;
-    }
-
-    typedef StateHolder<Thread::DisableAbortCheck, Thread::EnableAbortCheck> DisableAbortCheckHolder;
-#endif
-
 private:
     // At the end of a catch, we may raise ThreadAbortException.  If catch clause set IP to resume in the
     // corresponding try block, our exception system will execute the same catch clause again and again.
@@ -4979,27 +4784,6 @@ private:
 
 typedef Thread::ForbidSuspendThreadHolder ForbidSuspendThreadHolder;
 typedef Thread::ThreadPreventAsyncHolder ThreadPreventAsyncHolder;
-typedef Thread::ThreadPreventAbortHolder ThreadPreventAbortHolder;
-
-// Combines ForBindSuspendThreadHolder and CrstHolder into one.
-class ForbidSuspendThreadCrstHolder
-{
-public:
-    // Note: member initialization is intentionally ordered.
-    ForbidSuspendThreadCrstHolder(CrstBase * pCrst)
-        : m_forbid_suspend_holder()
-        , m_lock_holder(pCrst)
-    { WRAPPER_NO_CONTRACT; }
-
-private:
-    ForbidSuspendThreadHolder   m_forbid_suspend_holder;
-    CrstHolder                  m_lock_holder;
-};
-
-ETaskType GetCurrentTaskType();
-
-
-
 typedef Thread::AVInRuntimeImplOkayHolder AVInRuntimeImplOkayHolder;
 
 BOOL RevertIfImpersonated(BOOL *bReverted, HANDLE *phToken);
index 1d0b59f..aa7fa9f 100644 (file)
@@ -130,12 +130,6 @@ inline OBJECTREF Thread::GetExposedObjectRaw()
     return ObjectFromHandle(m_ExposedObject);
 }
 
-inline void Thread::FinishSOWork()
-{
-    WRAPPER_NO_CONTRACT;
-    _ASSERTE(!HasThreadStateNC(TSNC_SOWorkNeeded));
-}
-
 #ifdef FEATURE_COMINTEROP
 inline void Thread::RevokeApartmentSpy()
 {
index f2a29f8..0e063a4 100644 (file)
@@ -937,29 +937,6 @@ BOOL Thread::IsExecutingWithinCer()
     return sContext.fWithinCer;
 }
 
-
-// Context structure used during stack walks to determine whether a given method is executing within a CER.
-struct CerStackCrawlContext
-{
-    MethodDesc *m_pStartMethod;         // First method we crawl (here for debug purposes)
-    bool        m_fFirstFrame;          // True for first callback only
-    bool        m_fWithinCer;           // The result
-};
-
-
-// Determine whether the method at the given depth in the thread's execution stack is executing within a CER.
-BOOL Thread::IsWithinCer(CrawlFrame *pCf)
-{
-    CONTRACTL
-    {
-        NOTHROW;
-        GC_NOTRIGGER;
-    }
-    CONTRACTL_END;
-
-    return FALSE;
-}
-
 #if defined(_TARGET_AMD64_) && defined(FEATURE_HIJACK)
 BOOL Thread::IsSafeToInjectThreadAbort(PTR_CONTEXT pContextToCheck)
 {
@@ -1017,11 +994,6 @@ BOOL Thread::ReadyForAsyncException()
         return FALSE;
     }
 
-    if (IsAbortRequested() && HasThreadStateNC(TSNC_SOWorkNeeded))
-    {
-        return TRUE;
-    }
-
     if (GetThread() == this && HasThreadStateNC (TSNC_PreparingAbort) && !IsRudeAbort() )
     {
         STRESS_LOG0(LF_APPDOMAIN, LL_INFO10, "in Thread::ReadyForAbort  PreparingAbort\n");
@@ -1029,25 +1001,6 @@ BOOL Thread::ReadyForAsyncException()
         return FALSE;
     }
 
-    if (IsAbortPrevented())
-    {
-        //
-        // If the thread is marked to have a FuncEval abort request, then allow that to go through
-        // since we dont want to block funcEval aborts. Such requests are initiated by the
-        // right-side when the thread is doing funcEval and the exception would be caught in the
-        // left-side's funcEval implementation that will then clear the funcEval-abort-state from the thread.
-        //
-        // If another thread also marked this one for a non-FuncEval abort, then the left-side will
-        // proceed to [re]throw that exception post funcEval abort. When we come here next, we would follow
-        // the usual rules to raise the exception and if raised, to prevent the abort if applicable.
-        //
-        if (!IsFuncEvalAbort())
-        {
-            STRESS_LOG0(LF_APPDOMAIN, LL_INFO10, "in Thread::ReadyForAbort  prevent abort\n");
-            return FALSE;
-        }
-    }
-
     // The thread requests not to be aborted.  Honor this for safe abort.
     if (!IsRudeAbort() && IsAsyncPrevented())
     {
@@ -2708,11 +2661,6 @@ void Thread::HandleThreadAbort ()
     STATIC_CONTRACT_THROWS;
     STATIC_CONTRACT_GC_TRIGGERS;
 
-    // It's possible we could go through here if we hit a hard SO and MC++ has called back
-    // into the runtime on this thread
-
-    FinishSOWork();
-
     if (IsAbortRequested() && GetAbortEndTime() < CLRGetTickCount64())
     {
         HandleThreadAbortTimeout();
@@ -2831,9 +2779,6 @@ void Thread::PerformPreemptiveGC()
         || ThreadStore::HoldingThreadStore())
         return;
 
-    if (Thread::ThreadsAtUnsafePlaces())
-        return;
-
 #ifdef DEBUGGING_SUPPORTED
     // Don't collect if the debugger is attach and either 1) there
     // are any threads held at unsafe places or 2) this thread is
@@ -6540,8 +6485,7 @@ retry_for_debugger:
         // at a safepoint - since this is the exact same behaviour
         // that the debugger needs, just use it's code.
         if ((hr == ERROR_TIMEOUT)
-            || Thread::ThreadsAtUnsafePlaces()
-#ifdef DEBUGGING_SUPPORTED  // seriously?  When would we want to disable debugging support? :)
+#ifdef DEBUGGING_SUPPORTED
              || (CORDebuggerAttached() &&
             // When the debugger is synchronizing, trying to perform a GC could deadlock. The GC has the
             // threadstore lock and synchronization cannot complete until the debugger can get the
index 6ef4e23..822402c 100644 (file)
@@ -638,8 +638,6 @@ typedef Wrapper<void *, DoNothing, DoNothing> PALPEFileHolder;
 #endif
 #endif // FEATURE_PAL
 
-void GetProcessMemoryLoad(LPMEMORYSTATUSEX pMSEX);
-
 #define SetupThreadForComCall(OOMRetVal)            \
     MAKE_CURRENT_THREAD_AVAILABLE_EX(GetThreadNULLOk()); \
     if (CURRENT_THREAD == NULL)                     \
index 959c08a..e7a155b 100644 (file)
@@ -721,7 +721,7 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> indcell_heap_holder(
                                new LoaderHeap(indcell_heap_reserve_size, indcell_heap_commit_size,
                                               initReservedMem, indcell_heap_reserve_size,
-                                              NULL, NULL, FALSE));
+                                              NULL, FALSE));
 
     initReservedMem += indcell_heap_reserve_size;
 
@@ -729,7 +729,6 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> cache_entry_heap_holder(
                                new LoaderHeap(cache_entry_heap_reserve_size, cache_entry_heap_commit_size,
                                               initReservedMem, cache_entry_heap_reserve_size,
-                                              NULL,
                                               &cache_entry_rangeList, FALSE));
 
     initReservedMem += cache_entry_heap_reserve_size;
@@ -738,7 +737,6 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> lookup_heap_holder(
                                new LoaderHeap(lookup_heap_reserve_size, lookup_heap_commit_size,
                                               initReservedMem, lookup_heap_reserve_size,
-                                              NULL,
                                               &lookup_rangeList, TRUE));
 
     initReservedMem += lookup_heap_reserve_size;
@@ -747,7 +745,6 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> dispatch_heap_holder(
                                new LoaderHeap(dispatch_heap_reserve_size, dispatch_heap_commit_size,
                                               initReservedMem, dispatch_heap_reserve_size,
-                                              NULL,
                                               &dispatch_rangeList, TRUE));
 
     initReservedMem += dispatch_heap_reserve_size;
@@ -756,7 +753,6 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> resolve_heap_holder(
                                new LoaderHeap(resolve_heap_reserve_size, resolve_heap_commit_size,
                                               initReservedMem, resolve_heap_reserve_size,
-                                              NULL,
                                               &resolve_rangeList, TRUE));
 
     initReservedMem += resolve_heap_reserve_size;
@@ -765,7 +761,6 @@ void VirtualCallStubManager::Init(BaseDomain *pDomain, LoaderAllocator *pLoaderA
     NewHolder<LoaderHeap> vtable_heap_holder(
                                new LoaderHeap(vtable_heap_reserve_size, vtable_heap_commit_size,
                                               initReservedMem, vtable_heap_reserve_size,
-                                              NULL,
                                               &vtable_rangeList, TRUE));
 
     initReservedMem += vtable_heap_reserve_size;
index 8ee0b15..af8aa3b 100644 (file)
@@ -120,9 +120,6 @@ LONG ThreadpoolMgr::Initialization=0;           // indicator of whether the thre
 // Cacheline aligned, hot variable
 DECLSPEC_ALIGN(MAX_CACHE_LINE_SIZE) unsigned int ThreadpoolMgr::LastDequeueTime; // used to determine if work items are getting thread starved
 
-// Move out of from preceeding variables' cache line
-DECLSPEC_ALIGN(MAX_CACHE_LINE_SIZE) int ThreadpoolMgr::offset_counter = 0;
-
 SPTR_IMPL(WorkRequest,ThreadpoolMgr,WorkRequestHead);        // Head of work request queue
 SPTR_IMPL(WorkRequest,ThreadpoolMgr,WorkRequestTail);        // Head of work request queue
 
@@ -1736,29 +1733,6 @@ void ThreadpoolMgr::RecycleMemory(LPVOID mem, enum MemType memType)
     }
 }
 
-#define THROTTLE_RATE  0.10 /* rate by which we increase the delay as number of threads increase */
-
-// This is to avoid the 64KB/1MB aliasing problem present on Pentium 4 processors,
-// which can significantly impact performance with HyperThreading enabled
-DWORD WINAPI ThreadpoolMgr::intermediateThreadProc(PVOID arg)
-{
-    WRAPPER_NO_CONTRACT;
-
-    offset_counter++;
-    if (offset_counter * offset_multiplier > (int)GetOsPageSize())
-        offset_counter = 0;
-
-    (void)_alloca(offset_counter * offset_multiplier);
-
-    intermediateThreadParam* param = (intermediateThreadParam*)arg;
-
-    LPTHREAD_START_ROUTINE ThreadFcnPtr = param->lpThreadFunction;
-    PVOID args = param->lpArg;
-    delete param;
-
-    return ThreadFcnPtr(args);
-}
-
 Thread* ThreadpoolMgr::CreateUnimpersonatedThread(LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpArgs, BOOL *pIsCLRThread)
 {
     STATIC_CONTRACT_NOTHROW;
@@ -1813,22 +1787,14 @@ Thread* ThreadpoolMgr::CreateUnimpersonatedThread(LPTHREAD_START_ROUTINE lpStart
         if (bOK != TRUE)
             return NULL;
 #endif // !FEATURE_PAL
-        NewHolder<intermediateThreadParam> lpThreadArgs(new (nothrow) intermediateThreadParam);
-        if (lpThreadArgs != NULL)
-        {
-            lpThreadArgs->lpThreadFunction = lpStartAddress;
-            lpThreadArgs->lpArg = lpArgs;
-            threadHandle = CreateThread(NULL,               // security descriptor
-                                        0,                  // default stack size
-                                        intermediateThreadProc,
-                                        lpThreadArgs,       // arguments
-                                        CREATE_SUSPENDED,
-                                        &threadId);
-
-            SetThreadName(threadHandle, W(".NET ThreadPool Worker"));
-            if (threadHandle != NULL)
-                lpThreadArgs.SuppressRelease();
-        }
+        threadHandle = CreateThread(NULL,               // security descriptor
+                                    0,                  // default stack size
+                                    lpStartAddress,
+                                    lpArgs,
+                                    CREATE_SUSPENDED,
+                                    &threadId);
+
+        SetThreadName(threadHandle, W(".NET ThreadPool Worker"));
 #ifndef FEATURE_PAL
         UndoRevert(bReverted, token);
 #endif // !FEATURE_PAL
index d112735..8087666 100644 (file)
@@ -764,13 +764,6 @@ public:
 
     // Private methods
 
-    static DWORD WINAPI intermediateThreadProc(PVOID arg);
-
-    typedef struct {
-        LPTHREAD_START_ROUTINE  lpThreadFunction;
-        PVOID                   lpArg;
-    } intermediateThreadParam;
-
     static Thread* CreateUnimpersonatedThread(LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpArgs, BOOL *pIsCLRThread);
 
     static BOOL CreateWorkerThread();
@@ -1100,9 +1093,6 @@ private:
 #ifdef _DEBUG
     static DWORD   TickCountAdjustment;                 // add this value to value returned by GetTickCount
 #endif
-
-    DECLSPEC_ALIGN(MAX_CACHE_LINE_SIZE) static int offset_counter;
-    static const int offset_multiplier = 128;
 };