@@ -611,8 +611,18 @@ typedef DPTR(class ComCallWrapper) PTR_ComCallWrapper;
611611
612612#include " shash.h"
613613#endif // FEATURE_COMINTEROP
614+ class ManagedObjectComWrapperTraits final : public NoRemoveSHashTraits<DefaultSHashTraits<void *>>
615+ {
616+ public:
617+ typedef LPVOID key_t ;
618+ static void *Null () { LIMITED_METHOD_CONTRACT; return NULL ; }
619+ static bool IsNull (void * *e) { LIMITED_METHOD_CONTRACT; return (e == NULL ); }
620+ static const LPVOID GetKey (void *e) { LIMITED_METHOD_CONTRACT; return e; }
621+ static count_t Hash (LPVOID key_t ) { LIMITED_METHOD_CONTRACT; return (count_t )(size_t ) key_t ; }
622+ static BOOL Equals (LPVOID lhs, LPVOID rhs) { LIMITED_METHOD_CONTRACT; return (lhs == rhs); }
623+ };
614624
615- using ManagedObjectComWrapperByIdMap = MapSHash<INT64, void *>;
625+ using ManagedObjectComWrapperSet = SHash<ManagedObjectComWrapperTraits< void *> >;
616626class InteropSyncBlockInfo
617627{
618628 friend class RCWHolder ;
@@ -636,7 +646,7 @@ class InteropSyncBlockInfo
636646#ifdef FEATURE_COMWRAPPERS
637647 , m_externalComObjectContext{}
638648 , m_managedObjectComWrapperLock{}
639- , m_managedObjectComWrapperMap {}
649+ , m_managedObjectComWrapperSet {}
640650#endif // FEATURE_COMWRAPPERS
641651#ifdef FEATURE_OBJCMARSHAL
642652 , m_taggedMemory{}
@@ -805,27 +815,24 @@ class InteropSyncBlockInfo
805815#if defined(FEATURE_COMWRAPPERS)
806816public:
807817#ifndef DACCESS_COMPILE
808- bool TrySetManagedObjectComWrapper (_In_ INT64 wrapperId, _In_ void * mocw, _In_ void * curr = NULL )
818+ bool AddManagedObjectComWrapper (_In_ void * mocw)
809819 {
810820 LIMITED_METHOD_CONTRACT;
811821
812- if (m_managedObjectComWrapperMap == NULL )
822+ if (m_managedObjectComWrapperSet == NULL )
813823 {
814- NewHolder<ManagedObjectComWrapperByIdMap > map = new ManagedObjectComWrapperByIdMap ();
815- if (InterlockedCompareExchangeT (&m_managedObjectComWrapperMap , (ManagedObjectComWrapperByIdMap *)map, NULL ) == NULL )
824+ NewHolder<ManagedObjectComWrapperSet > map = new ManagedObjectComWrapperSet ();
825+ if (InterlockedCompareExchangeT (&m_managedObjectComWrapperSet , (ManagedObjectComWrapperSet *)map, NULL ) == NULL )
816826 {
817827 map.SuppressRelease ();
818828 }
819829
820- _ASSERTE (m_managedObjectComWrapperMap != NULL );
830+ _ASSERTE (m_managedObjectComWrapperSet != NULL );
821831 }
822832
823833 CrstHolder lock (&m_managedObjectComWrapperLock);
824834
825- if (m_managedObjectComWrapperMap->LookupPtr (wrapperId) != curr)
826- return false ;
827-
828- m_managedObjectComWrapperMap->Add (wrapperId, mocw);
835+ m_managedObjectComWrapperSet->Add (mocw);
829836 return true ;
830837 }
831838#endif // !DACCESS_COMPILE
@@ -854,7 +861,7 @@ class InteropSyncBlockInfo
854861 void * m_externalComObjectContext;
855862
856863 CrstExplicitInit m_managedObjectComWrapperLock;
857- ManagedObjectComWrapperByIdMap* m_managedObjectComWrapperMap ;
864+ ManagedObjectComWrapperSet* m_managedObjectComWrapperSet ;
858865#endif // FEATURE_COMWRAPPERS
859866
860867#ifdef FEATURE_OBJCMARSHAL
0 commit comments