From 4adbd6765d79c25dbae8bce48083c8a4e81934f6 Mon Sep 17 00:00:00 2001 From: danmosemsft Date: Sun, 12 Feb 2017 19:55:22 -0800 Subject: [PATCH] Remove dead appdomainhelper* files --- src/vm/appdomain.cpp | 1 - src/vm/appdomainhelper.cpp | 546 --------------------------------------- src/vm/appdomainhelper.h | 371 -------------------------- src/vm/appdomainnative.cpp | 1 - src/vm/assembly.cpp | 1 - src/vm/assemblynative.cpp | 1 - src/vm/cominterfacemarshaler.cpp | 1 - src/vm/comsynchronizable.cpp | 1 - src/vm/i386/excepx86.cpp | 1 - src/vm/securitymeta.cpp | 1 - src/vm/securitystackwalk.h | 1 - src/vm/threads.cpp | 1 - 12 files changed, 927 deletions(-) delete mode 100644 src/vm/appdomainhelper.cpp delete mode 100644 src/vm/appdomainhelper.h diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp index e6d4ed1..e13c7db 100644 --- a/src/vm/appdomain.cpp +++ b/src/vm/appdomain.cpp @@ -37,7 +37,6 @@ #include "comdelegate.h" #include "siginfo.hpp" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #include "objectclone.h" #endif #include "typekey.h" diff --git a/src/vm/appdomainhelper.cpp b/src/vm/appdomainhelper.cpp deleted file mode 100644 index 2c05316..0000000 --- a/src/vm/appdomainhelper.cpp +++ /dev/null @@ -1,546 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - - -// - -#include "common.h" - -#ifdef FEATURE_REMOTING - -#include "appdomainhelper.h" -#include "appdomain.inl" - -void AppDomainHelper::CopyEncodingToByteArray(IN PBYTE pbData, - IN DWORD cbData, - OUT OBJECTREF* pArray) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(cbData==0 || pbData!=NULL); - PRECONDITION(CheckPointer(pArray)); - } - CONTRACTL_END; - PREFIX_ASSUME(pArray != NULL); - - U1ARRAYREF pObj; - - if(cbData) { - pObj = (U1ARRAYREF)AllocatePrimitiveArray(ELEMENT_TYPE_U1,cbData); - memcpyNoGCRefs(pObj->m_Array, pbData, cbData); - *pArray = (OBJECTREF) pObj; - } else - *pArray = NULL; - - VALIDATEOBJECTREF(*pArray); -} - - -void AppDomainHelper::CopyByteArrayToEncoding(IN U1ARRAYREF* pArray, - OUT PBYTE* ppbData, - OUT DWORD* pcbData) -{ - CONTRACTL - { - THROWS; - GC_NOTRIGGER; - MODE_COOPERATIVE; - PRECONDITION(pArray!=NULL); - PRECONDITION(ppbData!=NULL); - PRECONDITION(pcbData!=NULL); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*pArray); - - if (*pArray == NULL) { - *ppbData = NULL; - *pcbData = 0; - return; - } - - DWORD size = (*pArray)->GetNumComponents(); - if(size) { - *ppbData = new BYTE[size]; - *pcbData = size; - - CopyMemory(*ppbData, (*pArray)->GetDirectPointerToNonObjectElements(), size); - } -} - - -struct MarshalObjectArgs : public CtxTransitionBaseArgs -{ - OBJECTREF* orObject; - U1ARRAYREF* porBlob; -}; - -void MarshalObjectADCallback(MarshalObjectArgs * args) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - } - CONTRACTL_END; - MethodDescCallSite marshalObject(METHOD__APP_DOMAIN__MARSHAL_OBJECT); - - ARG_SLOT argsCall[] = { - ObjToArgSlot(*(args->orObject)) - }; - - *(args->porBlob) = (U1ARRAYREF) marshalObject.Call_RetOBJECTREF(argsCall); -} - - -// Marshal a single object into a serialized blob. -void AppDomainHelper::MarshalObject(ADID appDomain, - IN OBJECTREF *orObject, // Object must be GC protected - OUT U1ARRAYREF *porBlob) -{ - - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(porBlob!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject); - - MarshalObjectArgs args; - args.orObject = orObject; - args.porBlob = porBlob; - - MakeCallWithPossibleAppDomainTransition(appDomain, (FPAPPDOMAINCALLBACK) MarshalObjectADCallback, &args); - - VALIDATEOBJECTREF(*porBlob); - -} - -void AppDomainHelper::MarshalObject(IN OBJECTREF *orObject, // Object must be GC protected - OUT U1ARRAYREF *porBlob) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(porBlob!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject); - - MethodDescCallSite marshalObject(METHOD__APP_DOMAIN__MARSHAL_OBJECT); - - ARG_SLOT argsCall[] = { - ObjToArgSlot(*orObject) - }; - - *porBlob = (U1ARRAYREF) marshalObject.Call_RetOBJECTREF(argsCall); - - VALIDATEOBJECTREF(*porBlob); -} - -// Marshal a single object into a serialized blob. -void AppDomainHelper::MarshalObject(IN AppDomain *pDomain, - IN OBJECTREF *orObject, // Object must be GC protected - OUT BYTE **ppbBlob, - OUT DWORD *pcbBlob) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(pDomain!=NULL); - PRECONDITION(orObject!=NULL); - PRECONDITION(ppbBlob!=NULL); - PRECONDITION(pcbBlob!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject); - - U1ARRAYREF orBlob = NULL; - - GCPROTECT_BEGIN(orBlob); - - MethodDescCallSite marshalObject(METHOD__APP_DOMAIN__MARSHAL_OBJECT); - - ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) - { - ARG_SLOT args[] = - { - ObjToArgSlot(*orObject) - }; - - orBlob = (U1ARRAYREF) marshalObject.Call_RetOBJECTREF(args); - } - END_DOMAIN_TRANSITION; - - if (orBlob != NULL) - CopyByteArrayToEncoding(&orBlob, - ppbBlob, - pcbBlob); - GCPROTECT_END(); -} - -// Marshal two objects into serialized blobs. -void AppDomainHelper::MarshalObjects(IN AppDomain *pDomain, - IN OBJECTREF *orObject1, - IN OBJECTREF *orObject2, - OUT BYTE **ppbBlob1, - OUT DWORD *pcbBlob1, - OUT BYTE **ppbBlob2, - OUT DWORD *pcbBlob2) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(pDomain!=NULL); - PRECONDITION(orObject1!=NULL); - PRECONDITION(ppbBlob1!=NULL); - PRECONDITION(pcbBlob1!=NULL); - PRECONDITION(orObject2!=NULL); - PRECONDITION(ppbBlob2!=NULL); - PRECONDITION(pcbBlob2!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject1)); - PRECONDITION(IsProtectedByGCFrame(orObject2)); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject1); - VALIDATEOBJECTREF(*orObject2); - - struct _gc { - U1ARRAYREF orBlob1; - U1ARRAYREF orBlob2; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - GCPROTECT_BEGIN(gc); - - MethodDescCallSite marshalObjects(METHOD__APP_DOMAIN__MARSHAL_OBJECTS); - - ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) - { - ARG_SLOT args[] = - { - ObjToArgSlot(*orObject1), - ObjToArgSlot(*orObject2), - PtrToArgSlot(&gc.orBlob2), - }; - - gc.orBlob1 = (U1ARRAYREF) marshalObjects.Call_RetOBJECTREF(args); - } - END_DOMAIN_TRANSITION; - - if (gc.orBlob1 != NULL) - { - CopyByteArrayToEncoding(&gc.orBlob1, - ppbBlob1, - pcbBlob1); - } - - if (gc.orBlob2 != NULL) - { - CopyByteArrayToEncoding(&gc.orBlob2, - ppbBlob2, - pcbBlob2); - } - - GCPROTECT_END(); -} - -// Unmarshal a single object from a serialized blob. -// Callers must GC protect both porBlob and porObject. -void AppDomainHelper::UnmarshalObject(IN AppDomain *pDomain, - IN U1ARRAYREF *porBlob, // Object must be GC protected - OUT OBJECTREF *porObject) // Object must be GC protected -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(pDomain!=NULL); - PRECONDITION(porBlob!=NULL); - PRECONDITION(porObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(porBlob)); - PRECONDITION(IsProtectedByGCFrame(porObject)); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*porBlob); - - MethodDescCallSite unmarshalObject(METHOD__APP_DOMAIN__UNMARSHAL_OBJECT); - - ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) - { - ARG_SLOT args[] = - { - ObjToArgSlot(*porBlob) - }; - - *porObject = unmarshalObject.Call_RetOBJECTREF(args); - } - END_DOMAIN_TRANSITION; - - VALIDATEOBJECTREF(*porObject); -} - -// Unmarshal a single object from a serialized blob. -void AppDomainHelper::UnmarshalObject(IN AppDomain *pDomain, - IN BYTE *pbBlob, - IN DWORD cbBlob, - OUT OBJECTREF *porObject) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(pDomain!=NULL); - PRECONDITION(porObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(porObject)); - } - CONTRACTL_END; - - OBJECTREF orBlob = NULL; - - MethodDescCallSite unmarshalObject(METHOD__APP_DOMAIN__UNMARSHAL_OBJECT); - - ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) - { - GCPROTECT_BEGIN(orBlob); - - AppDomainHelper::CopyEncodingToByteArray(pbBlob, - cbBlob, - &orBlob); - - ARG_SLOT args[] = - { - ObjToArgSlot(orBlob) - }; - - *porObject = unmarshalObject.Call_RetOBJECTREF(args); - - GCPROTECT_END(); - } - END_DOMAIN_TRANSITION; - - VALIDATEOBJECTREF(*porObject); -} - -// Unmarshal two objects from serialized blobs. -void AppDomainHelper::UnmarshalObjects(IN AppDomain *pDomain, - IN BYTE *pbBlob1, - IN DWORD cbBlob1, - IN BYTE *pbBlob2, - IN DWORD cbBlob2, - OUT OBJECTREF *porObject1, - OUT OBJECTREF *porObject2) -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(pDomain!=NULL); - PRECONDITION(porObject1!=NULL); - PRECONDITION(porObject2!=NULL); - PRECONDITION(IsProtectedByGCFrame(porObject1)); - PRECONDITION(IsProtectedByGCFrame(porObject2)); - } - CONTRACTL_END; - - MethodDescCallSite unmarshalObjects(METHOD__APP_DOMAIN__UNMARSHAL_OBJECTS); - - struct _gc { - OBJECTREF orBlob1; - OBJECTREF orBlob2; - OBJECTREF orObject2; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - ENTER_DOMAIN_PTR(pDomain,ADV_RUNNINGIN) - { - - GCPROTECT_BEGIN(gc); - - AppDomainHelper::CopyEncodingToByteArray(pbBlob1, - cbBlob1, - &gc.orBlob1); - - AppDomainHelper::CopyEncodingToByteArray(pbBlob2, - cbBlob2, - &gc.orBlob2); - - ARG_SLOT args[] = - { - ObjToArgSlot(gc.orBlob1), - ObjToArgSlot(gc.orBlob2), - PtrToArgSlot(&gc.orObject2), - }; - - *porObject1 = unmarshalObjects.Call_RetOBJECTREF(args); - *porObject2 = gc.orObject2; - - GCPROTECT_END(); - } - END_DOMAIN_TRANSITION; - - VALIDATEOBJECTREF(*porObject1); - VALIDATEOBJECTREF(*porObject2); -} - -// Copy an object from the given appdomain into the current appdomain. -OBJECTREF AppDomainHelper::CrossContextCopyFrom(IN ADID dwDomainId, - IN OBJECTREF *orObject) // Object must be GC protected -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - } - CONTRACTL_END; - - struct _gc - { - U1ARRAYREF orBlob; - OBJECTREF pResult; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - GCPROTECT_BEGIN(gc); - AppDomainHelper::MarshalObject(dwDomainId, orObject, &gc.orBlob); - AppDomainHelper::UnmarshalObject(GetAppDomain(), &gc.orBlob, &gc.pResult); - GCPROTECT_END(); - VALIDATEOBJECTREF(gc.pResult); - return gc.pResult; -} - -// Copy an object from the given appdomain into the current appdomain. -OBJECTREF AppDomainHelper::CrossContextCopyTo(IN ADID dwDomainId, - IN OBJECTREF *orObject) // Object must be GC protected -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - } - CONTRACTL_END; - - - struct _gc - { - U1ARRAYREF orBlob; - OBJECTREF pResult; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - GCPROTECT_BEGIN(gc); - AppDomainHelper::MarshalObject(orObject, &gc.orBlob); - ENTER_DOMAIN_ID(dwDomainId); - AppDomainHelper::UnmarshalObject(GetAppDomain(),&gc.orBlob, &gc.pResult); - END_DOMAIN_TRANSITION; - GCPROTECT_END(); - VALIDATEOBJECTREF(gc.pResult); - return gc.pResult; - -} - -// Copy an object from the given appdomain into the current appdomain. -OBJECTREF AppDomainHelper::CrossContextCopyFrom(IN AppDomain *pDomain, - IN OBJECTREF *orObject) // Object must be GC protected -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - PRECONDITION(pDomain!=NULL); - PRECONDITION(pDomain != GetAppDomain()); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject); - - struct _gc { - U1ARRAYREF orBlob; - OBJECTREF result; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - GCPROTECT_BEGIN(gc); - ENTER_DOMAIN_PTR(pDomain, ADV_RUNNINGIN); - AppDomainHelper::MarshalObject(orObject, &gc.orBlob); - END_DOMAIN_TRANSITION; - AppDomainHelper::UnmarshalObject(GetAppDomain(),&gc.orBlob, &gc.result); - GCPROTECT_END(); - - VALIDATEOBJECTREF(gc.result); - - return gc.result; -} - -// Copy an object to the given appdomain from the current appdomain. -OBJECTREF AppDomainHelper::CrossContextCopyTo(IN AppDomain *pDomain, - IN OBJECTREF *orObject) // Object must be GC protected -{ - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(orObject!=NULL); - PRECONDITION(IsProtectedByGCFrame(orObject)); - PRECONDITION(pDomain!=NULL); - PRECONDITION(pDomain != GetAppDomain()); - } - CONTRACTL_END; - - VALIDATEOBJECTREF(*orObject); - - struct _gc { - U1ARRAYREF orBlob; - OBJECTREF result; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - GCPROTECT_BEGIN(gc); - AppDomainHelper::MarshalObject(orObject, &gc.orBlob); - AppDomainHelper::UnmarshalObject(pDomain, &gc.orBlob, &gc.result); - GCPROTECT_END(); - - VALIDATEOBJECTREF(gc.result); - - return gc.result; -} - -#endif // FEATURE_REMOTING - diff --git a/src/vm/appdomainhelper.h b/src/vm/appdomainhelper.h deleted file mode 100644 index e331555..0000000 --- a/src/vm/appdomainhelper.h +++ /dev/null @@ -1,371 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - - -#ifndef _APPDOMAIN_HELPER_H_ -#define _APPDOMAIN_HELPER_H_ - -#ifndef FEATURE_REMOTING -#error FEATURE_REMOTING is not set, please do not include appdomainhelper.h -#endif - -// Marshal a single object into a serialized blob. -// -// - -class AppDomainHelper { - - friend class MarshalCache; - - // A pair of helper to move serialization info between managed byte-array and - // unmanaged blob. - static void AppDomainHelper::CopyEncodingToByteArray(IN PBYTE pbData, - IN DWORD cbData, - OUT OBJECTREF* pArray); - - static void AppDomainHelper::CopyByteArrayToEncoding(IN U1ARRAYREF* pArray, - OUT PBYTE* ppbData, - OUT DWORD* pcbData); - -public: - // Marshal a single object into a serialized blob. - static void AppDomainHelper::MarshalObject(IN OBJECTREF *orObject, - OUT U1ARRAYREF *porBlob); - - static void AppDomainHelper::MarshalObject(IN ADID pDomain, - IN OBJECTREF *orObject, - OUT U1ARRAYREF *porBlob); - // Marshal one object into a seraialized blob. - static void AppDomainHelper::MarshalObject(IN AppDomain *pDomain, - IN OBJECTREF *orObject, - OUT BYTE **ppbBlob, - OUT DWORD *pcbBlob); - - // Marshal two objects into serialized blobs. - static void AppDomainHelper::MarshalObjects(IN AppDomain *pDomain, - IN OBJECTREF *orObject1, - IN OBJECTREF *orObject2, - OUT BYTE **ppbBlob1, - OUT DWORD *pcbBlob1, - OUT BYTE **ppbBlob2, - OUT DWORD *pcbBlob2); - - // Unmarshal a single object from a serialized blob. - static void AppDomainHelper::UnmarshalObject(IN AppDomain *pDomain, - IN U1ARRAYREF *porBlob, - OUT OBJECTREF *porObject); - - // Unmarshal a single object from a serialized blob. - static void AppDomainHelper::UnmarshalObject(IN AppDomain *pDomain, - IN BYTE *pbBlob, - IN DWORD cbBlob, - OUT OBJECTREF *porObject); - - // Unmarshal two objects from serialized blobs. - static void AppDomainHelper::UnmarshalObjects(IN AppDomain *pDomain, - IN BYTE *pbBlob1, - IN DWORD cbBlob1, - IN BYTE *pbBlob2, - IN DWORD cbBlob2, - OUT OBJECTREF *porObject1, - OUT OBJECTREF *porObject2); - - // Copy an object from the given appdomain into the current appdomain. - static OBJECTREF AppDomainHelper::CrossContextCopyFrom(IN AppDomain *pAppDomain, - IN OBJECTREF *orObject); - // Copy an object to the given appdomain from the current appdomain. - static OBJECTREF AppDomainHelper::CrossContextCopyTo(IN AppDomain *pAppDomain, - IN OBJECTREF *orObject); - // Copy an object from the given appdomain into the current appdomain. - static OBJECTREF AppDomainHelper::CrossContextCopyFrom(IN ADID dwDomainId, - IN OBJECTREF *orObject); - // Copy an object to the given appdomain from the current appdomain. - static OBJECTREF AppDomainHelper::CrossContextCopyTo(IN ADID dwDomainId, - IN OBJECTREF *orObject); - -}; - -// Cache the bits needed to serialize/deserialize managed objects that will be -// passed across appdomain boundaries during a stackwalk. The serialization is -// performed lazily the first time it's needed and remains valid throughout the -// stackwalk. The last deserialized object is cached and tagged with its -// appdomain context. It's valid as long as we're walking frames within the same -// appdomain. -// -class MarshalCache -{ -public: - MarshalCache() - { - LIMITED_METHOD_CONTRACT; - ZeroMemory(this, sizeof(*this)); - } - - ~MarshalCache() - { - LIMITED_METHOD_CONTRACT; - if (m_pbObj1) - delete [] m_pbObj1; - if (m_pbObj2) - delete [] m_pbObj2; - } - - void EnsureSerializationOK() - { - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - } - CONTRACTL_END; - if ((m_sGC.m_orInput1 != NULL && (m_pbObj1 == NULL || m_cbObj1 == 0)) || - (m_sGC.m_orInput2 != NULL && (m_pbObj2 == NULL || m_cbObj2 == 0))) - { - // Serialization went bad -> Throw exception indicating so. - COMPlusThrow(kSecurityException, IDS_UNMARSHALABLE_DEMAND_OBJECT); - } - } - - void EnsureDeserializationOK() - { - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - } - CONTRACTL_END; - if ((m_pbObj1 != NULL && m_sGC.m_orOutput1 == NULL ) || - (m_pbObj2 != NULL && m_sGC.m_orOutput2 == NULL ) ) - { - // DeSerialization went bad -> Throw exception indicating so. - COMPlusThrow(kSecurityException, IDS_UNMARSHALABLE_DEMAND_OBJECT); - } - } - -#ifndef DACCESS_COMPILE - - // Set the original value of the first cached object. - void SetObject(OBJECTREF orObject) - { - LIMITED_METHOD_CONTRACT; - m_pOriginalDomain = ::GetAppDomain(); - m_sGC.m_orInput1 = orObject; - } - - // Set the original values of both cached objects. - void SetObjects(OBJECTREF orObject1, OBJECTREF orObject2) - { - LIMITED_METHOD_CONTRACT; - m_pOriginalDomain = ::GetAppDomain(); - m_sGC.m_orInput1 = orObject1; - m_sGC.m_orInput2 = orObject2; - } - -#endif //!DACCESS_COMPILE - - // Get a copy of the first object suitable for use in the given appdomain. - OBJECTREF GetObject(AppDomain *pDomain) - { - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - } - CONTRACTL_END; - CheckADValidity(pDomain, ADV_RUNNINGIN); - - // No transition -- just return original object. - if (pDomain == m_pOriginalDomain) { - if (m_fObjectUpdated) - UpdateObjectFinish(); - return m_sGC.m_orInput1; - } - - // We've already deserialized the object into the correct context. - if (pDomain == m_pCachedDomain) - return m_sGC.m_orOutput1; - - // If we've updated the object in a different appdomain from the one we - // originally started in, the cached object will be more up to date than - // the original. Resync the objects. - if (m_fObjectUpdated) - UpdateObjectFinish(); - - // Check whether we've serialized the original input object yet. - if (m_pbObj1 == NULL && m_sGC.m_orInput1 != NULL) - { - AppDomainHelper::MarshalObject(m_pOriginalDomain, - &m_sGC.m_orInput1, - &m_pbObj1, - &m_cbObj1); - EnsureSerializationOK(); - } - - // Deserialize into the correct context. - if (m_pbObj1 != NULL) - { - AppDomainHelper::UnmarshalObject(pDomain, - m_pbObj1, - m_cbObj1, - &m_sGC.m_orOutput1); - EnsureDeserializationOK(); - } - m_pCachedDomain = pDomain; - - return m_sGC.m_orOutput1; - } - - // As above, but retrieve both objects. - OBJECTREF GetObjects(AppDomain *pDomain, OBJECTREF *porObject2) - { - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - } - CONTRACTL_END; - CheckADValidity(pDomain, ADV_RUNNINGIN); - // No transition -- just return original objects. - if (pDomain == m_pOriginalDomain) { - if (m_fObjectUpdated) - UpdateObjectFinish(); - *porObject2 = m_sGC.m_orInput2; - return m_sGC.m_orInput1; - } - - // We've already deserialized the objects into the correct context. - if (pDomain == m_pCachedDomain) { - *porObject2 = m_sGC.m_orOutput2; - return m_sGC.m_orOutput1; - } - - // If we've updated the object in a different appdomain from the one we - // originally started in, the cached object will be more up to date than - // the original. Resync the objects. - if (m_fObjectUpdated) - UpdateObjectFinish(); - - // Check whether we've serialized the original input objects yet. - if ((m_pbObj1 == NULL && m_sGC.m_orInput1 != NULL) || - (m_pbObj2 == NULL && m_sGC.m_orInput2 != NULL)) - { - AppDomainHelper::MarshalObjects(m_pOriginalDomain, - &m_sGC.m_orInput1, - &m_sGC.m_orInput2, - &m_pbObj1, - &m_cbObj1, - &m_pbObj2, - &m_cbObj2); - EnsureSerializationOK(); - - } - if (m_pbObj1 != NULL || m_pbObj2 != NULL) - { - // Deserialize into the correct context. - AppDomainHelper::UnmarshalObjects(pDomain, - m_pbObj1, - m_cbObj1, - m_pbObj2, - m_cbObj2, - &m_sGC.m_orOutput1, - &m_sGC.m_orOutput2); - EnsureDeserializationOK(); - } - m_pCachedDomain = pDomain; - - *porObject2 = m_sGC.m_orOutput2; - return m_sGC.m_orOutput1; - } - - // Change the first object (updating the cacheing information - // appropriately). - void UpdateObject(AppDomain *pDomain, OBJECTREF orObject) - { - CONTRACTL - { - NOTHROW; - GC_NOTRIGGER; - MODE_ANY; - } - CONTRACTL_END; - - // The cached serialized blob is now useless. - CheckADValidity(pDomain, ADV_RUNNINGIN); - if (m_pbObj1) - delete [] m_pbObj1; - m_pbObj1 = NULL; - m_cbObj1 = 0; - - // The object we have now is valid in it's own appdomain, so place that - // in the object cache. - m_pCachedDomain = pDomain; - m_sGC.m_orOutput1 = orObject; - - // If the object is updated in the original context, just use the new - // value as is. In this case we have the data to re-marshal the updated - // object as normal, so we can consider the cache fully updated and exit - // now. - if (pDomain == m_pOriginalDomain) { - m_sGC.m_orInput1 = orObject; - m_fObjectUpdated = false; - return; - } - - // We want to avoid re-marshaling the updated value as long as possible - // (it might be updated again before we need its value in a different - // context). So set a flag to indicate that the object must be - // re-marshaled when the value is queried in a new context. - m_fObjectUpdated = true; - } - - // This structure is public only so that it can be GC protected. Do not - // access the fields directly, they change in an unpredictable fashion due - // to the lazy cacheing algorithm. - struct _gc { - OBJECTREF m_orInput1; - OBJECTREF m_orInput2; - OBJECTREF m_orOutput1; - OBJECTREF m_orOutput2; - } m_sGC; - -private: - - // Called after one or more calls to UpdateObject to marshal the updated - // object back into its original context (it's assumed we're called in this - // context). - void UpdateObjectFinish() - { - CONTRACTL - { - THROWS; - GC_TRIGGERS; - MODE_COOPERATIVE; - PRECONDITION(m_fObjectUpdated && m_pbObj1 == NULL); - } - CONTRACTL_END; - AppDomainHelper::MarshalObject(m_pCachedDomain, - &m_sGC.m_orOutput1, - &m_pbObj1, - &m_cbObj1); - AppDomainHelper::UnmarshalObject(m_pOriginalDomain, - m_pbObj1, - m_cbObj1, - &m_sGC.m_orInput1); - m_fObjectUpdated = false; - } - - BYTE *m_pbObj1; - DWORD m_cbObj1; - BYTE *m_pbObj2; - DWORD m_cbObj2; - AppDomain *m_pCachedDomain; - AppDomain *m_pOriginalDomain; - bool m_fObjectUpdated; -}; - -#endif diff --git a/src/vm/appdomainnative.cpp b/src/vm/appdomainnative.cpp index 47509d7..dd46add 100644 --- a/src/vm/appdomainnative.cpp +++ b/src/vm/appdomainnative.cpp @@ -9,7 +9,6 @@ #include "appdomainnative.hpp" #ifdef FEATURE_REMOTING #include "remoting.h" -#include "appdomainhelper.h" #endif #include "security.h" #include "vars.hpp" diff --git a/src/vm/assembly.cpp b/src/vm/assembly.cpp index 3e1745b..fc9ce71 100644 --- a/src/vm/assembly.cpp +++ b/src/vm/assembly.cpp @@ -46,7 +46,6 @@ #include "appdomainnative.hpp" #ifdef FEATURE_REMOTING #include "remoting.h" -#include "appdomainhelper.h" #endif #include "customattribute.h" #include "winnls.h" diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp index 7175b15..8daa851 100644 --- a/src/vm/assemblynative.cpp +++ b/src/vm/assemblynative.cpp @@ -29,7 +29,6 @@ #include "frames.h" #include "typeparse.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #endif #include "stackprobe.h" diff --git a/src/vm/cominterfacemarshaler.cpp b/src/vm/cominterfacemarshaler.cpp index 0bd22a0..58dd504 100644 --- a/src/vm/cominterfacemarshaler.cpp +++ b/src/vm/cominterfacemarshaler.cpp @@ -20,7 +20,6 @@ #include "interopconverter.h" #ifdef FEATURE_REMOTING #include "remoting.h" -#include "appdomainhelper.h" #include "crossdomaincalls.h" #endif #include "notifyexternals.h" diff --git a/src/vm/comsynchronizable.cpp b/src/vm/comsynchronizable.cpp index e042c8e..3a39523 100644 --- a/src/vm/comsynchronizable.cpp +++ b/src/vm/comsynchronizable.cpp @@ -29,7 +29,6 @@ #endif #include "eeconfig.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #include "objectclone.h" #else #include "callhelpers.h" diff --git a/src/vm/i386/excepx86.cpp b/src/vm/i386/excepx86.cpp index 10f68a9..2997c57 100644 --- a/src/vm/i386/excepx86.cpp +++ b/src/vm/i386/excepx86.cpp @@ -28,7 +28,6 @@ #include "dllimportcallback.h" #include "threads.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #endif #include "eeconfig.h" #include "vars.hpp" diff --git a/src/vm/securitymeta.cpp b/src/vm/securitymeta.cpp index 7027c47..7cc8b65 100644 --- a/src/vm/securitymeta.cpp +++ b/src/vm/securitymeta.cpp @@ -29,7 +29,6 @@ #include "threads.h" #include "eventtrace.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #include "objectclone.h" #endif //FEATURE_REMOTING #include "typestring.h" diff --git a/src/vm/securitystackwalk.h b/src/vm/securitystackwalk.h index 3aaf9b5..f59c958 100644 --- a/src/vm/securitystackwalk.h +++ b/src/vm/securitystackwalk.h @@ -19,7 +19,6 @@ #include "security.h" #include "holder.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #endif class ApplicationSecurityDescriptor; diff --git a/src/vm/threads.cpp b/src/vm/threads.cpp index 791a09f..81bf023 100644 --- a/src/vm/threads.cpp +++ b/src/vm/threads.cpp @@ -31,7 +31,6 @@ #include "appdomainstack.inl" #include "eventtrace.h" #ifdef FEATURE_REMOTING -#include "appdomainhelper.h" #endif #include "comutilnative.h" #include "finalizerthread.h" -- 2.7.4