summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2019-02-18 16:37:19 -0800
committerGitHub <noreply@github.com>2019-02-18 16:37:19 -0800
commit281f69036a435d11349fffdee6bb2f0c20f818eb (patch)
tree6fd05e3671cc2895ce4de4261bb7d8faf474addf
parentfe4efab4b771d6c01abe1109f7a81e405aa9fa4d (diff)
downloadcoreclr-281f69036a435d11349fffdee6bb2f0c20f818eb.tar.gz
coreclr-281f69036a435d11349fffdee6bb2f0c20f818eb.tar.bz2
coreclr-281f69036a435d11349fffdee6bb2f0c20f818eb.zip
Remove resetting of unmanaged thread locale from thread pool APIs (#22682)
The cost of doing this is showing up in the TechEmpower profiles. There is a lot of thread locale state in unmanaged libraries and OS APIs that the threadpool friendly code has to be aware off. It does not make sense to keep reseting just the Locale.
-rw-r--r--src/vm/finalizerthread.cpp10
-rw-r--r--src/vm/util.cpp19
-rw-r--r--src/vm/util.hpp27
-rw-r--r--src/vm/win32threadpool.cpp8
4 files changed, 3 insertions, 61 deletions
diff --git a/src/vm/finalizerthread.cpp b/src/vm/finalizerthread.cpp
index 0a7569a9b8..2a44b455ca 100644
--- a/src/vm/finalizerthread.cpp
+++ b/src/vm/finalizerthread.cpp
@@ -168,12 +168,8 @@ Object * FinalizerThread::DoOneFinalization(Object* fobj, Thread* pThread,int bi
}
};
{
- ThreadLocaleHolder localeHolder;
-
- {
- ResetFinalizerStartTime resetTime;
- CallFinalizer(fobj);
- }
+ ResetFinalizerStartTime resetTime;
+ CallFinalizer(fobj);
}
pThread->InternalReset();
}
@@ -194,8 +190,6 @@ Object * FinalizerThread::DoOneFinalization(Object* fobj, Thread* pThread,int bi
args.bitToCheck = bitToCheck;
GCPROTECT_BEGIN(args.fobj);
{
- ThreadLocaleHolder localeHolder;
-
_ASSERTE(pThreadTurnAround != NULL);
ManagedThreadBase::FinalizerAppDomain(targetAppDomain,
FinalizeAllObjects_Wrapper,
diff --git a/src/vm/util.cpp b/src/vm/util.cpp
index 65fe6dd39c..f03c5e3605 100644
--- a/src/vm/util.cpp
+++ b/src/vm/util.cpp
@@ -2043,11 +2043,6 @@ size_t GetCacheSizePerLogicalCpu(BOOL bTrueSize)
//---------------------------------------------------------------------
#ifndef FEATURE_PAL
-ThreadLocaleHolder::~ThreadLocaleHolder()
-{
- SetThreadLocale(m_locale);
-}
-
HMODULE CLRGetModuleHandle(LPCWSTR lpModuleFileName)
{
// Don't use dynamic contract: will override GetLastError value
@@ -2058,20 +2053,6 @@ HMODULE CLRGetModuleHandle(LPCWSTR lpModuleFileName)
HMODULE hMod = WszGetModuleHandle(lpModuleFileName);
return hMod;
}
-
-
-HMODULE CLRGetCurrentModuleHandle()
-{
- // Don't use dynamic contract: will override GetLastError value
- STATIC_CONTRACT_NOTHROW;
- STATIC_CONTRACT_GC_NOTRIGGER;
- STATIC_CONTRACT_FORBID_FAULT;
-
- HMODULE hMod = WszGetModuleHandle(NULL);
- return hMod;
-}
-
-
#endif // !FEATURE_PAL
LPVOID EEHeapAllocInProcessHeap(DWORD dwFlags, SIZE_T dwBytes);
diff --git a/src/vm/util.hpp b/src/vm/util.hpp
index 7f88f31761..06afda69b6 100644
--- a/src/vm/util.hpp
+++ b/src/vm/util.hpp
@@ -681,10 +681,6 @@ inline BOOL CLRHosted()
#ifndef FEATURE_PAL
HMODULE CLRGetModuleHandle(LPCWSTR lpModuleFileName);
-// Equivalent to CLRGetModuleHandle(NULL) but doesn't have the INJECT_FAULT contract associated
-// with CLRGetModuleHandle.
-HMODULE CLRGetCurrentModuleHandle();
-
HMODULE CLRLoadLibraryEx(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
#endif // !FEATURE_PAL
@@ -875,29 +871,8 @@ inline bool IsInCantStopRegion()
}
#endif // _DEBUG
-
-// PAL does not support per-thread locales. The holder is no-op for FEATURE_PALs
-class ThreadLocaleHolder
-{
-#ifndef FEATURE_PAL
-public:
-
- ThreadLocaleHolder()
- {
- m_locale = GetThreadLocale();
- }
-
- ~ThreadLocaleHolder();
-
-private:
- LCID m_locale;
-#endif // !FEATURE_PAL
-};
-
-
-
BOOL IsValidMethodCodeNotification(USHORT Notification);
-
+
typedef DPTR(struct JITNotification) PTR_JITNotification;
struct JITNotification
{
diff --git a/src/vm/win32threadpool.cpp b/src/vm/win32threadpool.cpp
index 908fedf51c..ccf6e8a484 100644
--- a/src/vm/win32threadpool.cpp
+++ b/src/vm/win32threadpool.cpp
@@ -831,8 +831,6 @@ BOOL ThreadpoolMgr::QueueUserWorkItem(LPTHREAD_START_ROUTINE Function,
ThreadCounter::Counts counts = CPThreadCounter.GetCleanCounts();
if ((MaxLimitTotalCPThreads - counts.NumActive) >= MinimumAvailableCPThreads )
{
- ThreadLocaleHolder localeHolder;
-
QueueUserWorkItemHelp(Function, Context);
return TRUE;
}
@@ -1507,8 +1505,6 @@ DWORD WINAPI ThreadpoolMgr::ExecuteHostRequest(PVOID pArg)
}
CONTRACTL_END;
- ThreadLocaleHolder localeHolder;
-
bool foundWork, wasNotRecalled;
ExecuteWorkRequest(&foundWork, &wasNotRecalled);
return ERROR_SUCCESS;
@@ -2005,8 +2001,6 @@ Work:
}
{
- ThreadLocaleHolder localeHolder;
-
ThreadpoolMgr::UpdateLastDequeueTime();
ThreadpoolMgr::ExecuteWorkRequest(&foundWork, &wasNotRecalled);
}
@@ -3621,8 +3615,6 @@ Top:
{
CONTRACT_VIOLATION(ThrowsViolation);
- ThreadLocaleHolder localeHolder;
-
((LPOVERLAPPED_COMPLETION_ROUTINE) key)(errorCode, numBytes, pOverlapped);
}