diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2018-12-01 10:31:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-01 10:31:35 +0100 |
commit | 4c461d754ff29d1ba37c145676c397062378d1c0 (patch) | |
tree | 3f31b4015f010054dae1b5bd2f2a516915d0fe74 /src/vm/appdomain.cpp | |
parent | 9fca919fdc8f20f80d923088620ec026196785bf (diff) | |
download | coreclr-4c461d754ff29d1ba37c145676c397062378d1c0.tar.gz coreclr-4c461d754ff29d1ba37c145676c397062378d1c0.tar.bz2 coreclr-4c461d754ff29d1ba37c145676c397062378d1c0.zip |
Enable COM interop for collectible classes (#20919)
* Enable COM interop for collectible classes
* Modify DispatchInfo to use LoaderAllocator handles
The DispatchMemberInfo was using global handles to refer to the managed
MemberInfo instances. That doesn't work with unloadability.
This change modifies it to use handles allocated from LoaderAllocator.
* Disable COM interop for WinRT types
* Remove collectible check from IsTypeVisibleFromCom. That fixes three
new COM interop tests
* Add collectible check to GetComClassFactory when we check for
unsupported interop with WinRT
* Add COM unloadability tests
Add two tests to test COM unloadability:
* One for using native COM server from managed COM client
* One for using managed COM objects from native client
* Add unloading test for IUnknownTest
* Disable NETClientPrimitivesInALC on Win ARM
The NETClientPrimitives is disabled there too.
Diffstat (limited to 'src/vm/appdomain.cpp')
-rw-r--r-- | src/vm/appdomain.cpp | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp index 19999cda26..1f978256fa 100644 --- a/src/vm/appdomain.cpp +++ b/src/vm/appdomain.cpp @@ -3554,7 +3554,6 @@ AppDomain::AppDomain() m_dwFlags = 0; m_pDefaultContext = NULL; #ifdef FEATURE_COMINTEROP - m_pComCallWrapperCache = NULL; m_pRCWCache = NULL; m_pRCWRefCache = NULL; m_pLicenseInteropHelperMT = NULL; @@ -3892,28 +3891,6 @@ void AppDomain::Terminate() delete m_pRCWRefCache; m_pRCWRefCache = NULL; } - - if (m_pComCallWrapperCache) - { - m_pComCallWrapperCache->Neuter(); - m_pComCallWrapperCache->Release(); - } - - // if the above released the wrapper cache, then it will call back and reset our - // m_pComCallWrapperCache to null. If not null, then need to set it's domain pointer to - // null. - if (! m_pComCallWrapperCache) - { - LOG((LF_APPDOMAIN, LL_INFO10, "AppDomain::Terminate ComCallWrapperCache released\n")); - } -#ifdef _DEBUG - else - { - m_pComCallWrapperCache = NULL; - LOG((LF_APPDOMAIN, LL_INFO10, "AppDomain::Terminate ComCallWrapperCache not released\n")); - } -#endif // _DEBUG - #endif // FEATURE_COMINTEROP @@ -6910,28 +6887,6 @@ BOOL AppDomain::WasSystemAssemblyLoadEventSent(void) #ifdef FEATURE_COMINTEROP -ComCallWrapperCache *AppDomain::GetComCallWrapperCache() -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_ANY; - INJECT_FAULT(COMPlusThrowOM();); - } - CONTRACTL_END; - - if (! m_pComCallWrapperCache) - { - BaseDomain::LockHolder lh(this); - - if (! m_pComCallWrapperCache) - m_pComCallWrapperCache = ComCallWrapperCache::Create(this); - } - _ASSERTE(m_pComCallWrapperCache); - return m_pComCallWrapperCache; -} - RCWRefCache *AppDomain::GetRCWRefCache() { CONTRACT(RCWRefCache*) |