summaryrefslogtreecommitdiff
path: root/src/vm/dllimport.cpp
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2019-01-03 03:52:30 -1000
committerGitHub <noreply@github.com>2019-01-03 03:52:30 -1000
commiteff427c02a89e135c38a96032feb3c9a6a13cf5b (patch)
tree1e190aef3a871e6bffb56edb67668c1cc31dfd3a /src/vm/dllimport.cpp
parentfaf2acefa7d88a446f561b38740a72d8838440a5 (diff)
downloadcoreclr-eff427c02a89e135c38a96032feb3c9a6a13cf5b.tar.gz
coreclr-eff427c02a89e135c38a96032feb3c9a6a13cf5b.tar.bz2
coreclr-eff427c02a89e135c38a96032feb3c9a6a13cf5b.zip
Cleanup current culture handling in the unmanaged runtime (#21706)
Large portion of the current culture handling in the unmanaged runtime inherited from desktop has been no-op. The nativeInitCultureAccessors QCall that it used to depend on desktop got (almost) never called in CoreCLR. - Delete resetting of current culture on threadpool threads. It was needed in desktop because of a very tricky flow of current culture between appdomains. It is superseded by the flowing the current culture via AsyncLocal in CoreCLR. - Comment out fetch of managed current culture for unmanaged resource lookup. It has number of problems that are not easy to fix. We are not localizing the unmanaged runtime currently anyway, so it is ok to just comment it out. - Fix the rest to call CultureInfo directly without going through Thread.CurrentThread
Diffstat (limited to 'src/vm/dllimport.cpp')
-rw-r--r--src/vm/dllimport.cpp29
1 files changed, 8 insertions, 21 deletions
diff --git a/src/vm/dllimport.cpp b/src/vm/dllimport.cpp
index 9dda48f3ee..2ce100b4b9 100644
--- a/src/vm/dllimport.cpp
+++ b/src/vm/dllimport.cpp
@@ -468,16 +468,8 @@ public:
argIdx--;
}
- LocalDesc locDescThread(MscorlibBinder::GetClass(CLASS__THREAD));
- DWORD dwThreadLocalNum = pcs->NewLocal(locDescThread);
-
- // call Thread.get_CurrentThread()
- pcs->EmitCALL(METHOD__THREAD__GET_CURRENT_THREAD, 0, 1);
- pcs->EmitDUP();
- pcs->EmitSTLOC(dwThreadLocalNum);
-
- // call current_thread.get_CurrentCulture()
- pcs->EmitCALL(METHOD__THREAD__GET_CULTURE, 1, 1);
+ // call CultureInfo.get_CurrentCulture()
+ pcs->EmitCALL(METHOD__CULTURE_INFO__GET_CURRENT_CULTURE, 0, 1);
// save the current culture
LocalDesc locDescCulture(MscorlibBinder::GetClass(CLASS__CULTURE_INFO));
@@ -486,23 +478,20 @@ public:
pcs->EmitSTLOC(dwCultureLocalNum);
// set a new one based on the LCID passed from unmanaged
- pcs->EmitLDLOC(dwThreadLocalNum);
pcs->EmitLDARG(argIdx);
// call CultureInfo..ctor(lcid)
- // call current_thread.set_CurrentCulture(culture)
+ // call CultureInfo.set_CurrentCulture(culture)
pcs->EmitNEWOBJ(METHOD__CULTURE_INFO__INT_CTOR, 1);
- pcs->EmitCALL(METHOD__THREAD__SET_CULTURE, 2, 0);
+ pcs->EmitCALL(METHOD__CULTURE_INFO__SET_CURRENT_CULTURE, 1, 0);
// and restore the current one after the call
m_slIL.SetCleanupNeeded();
ILCodeStream *pcsCleanup = m_slIL.GetCleanupCodeStream();
- // call current_thread.set_CurrentCulture(original_culture)
- pcsCleanup->EmitLDLOC(dwThreadLocalNum);
+ // call CultureInfo.set_CurrentCulture(original_culture)
pcsCleanup->EmitLDLOC(dwCultureLocalNum);
- pcsCleanup->EmitCALL(METHOD__THREAD__SET_CULTURE, 1, 1);
-
+ pcsCleanup->EmitCALL(METHOD__CULTURE_INFO__SET_CURRENT_CULTURE, 1, 0);
}
else
{
@@ -514,10 +503,8 @@ public:
}
else
{
- // call Thread.get_CurrentThread()
- // call current_thread.get_CurrentCulture()
- pcs->EmitCALL(METHOD__THREAD__GET_CURRENT_THREAD, 0, 1);
- pcs->EmitCALL(METHOD__THREAD__GET_CULTURE, 1, 1);
+ // call CultureInfo.get_CurrentCulture()
+ pcs->EmitCALL(METHOD__CULTURE_INFO__GET_CURRENT_CULTURE, 0, 1);
//call CultureInfo.get_LCID(this)
pcs->EmitCALL(METHOD__CULTURE_INFO__GET_ID, 1, 1);