@@ -611,8 +611,18 @@ typedef DPTR(class ComCallWrapper) PTR_ComCallWrapper;
611
611
612
612
#include " shash.h"
613
613
#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
+ };
614
624
615
- using ManagedObjectComWrapperByIdMap = MapSHash<INT64, void *>;
625
+ using ManagedObjectComWrapperSet = SHash<ManagedObjectComWrapperTraits< void *> >;
616
626
class InteropSyncBlockInfo
617
627
{
618
628
friend class RCWHolder ;
@@ -636,7 +646,7 @@ class InteropSyncBlockInfo
636
646
#ifdef FEATURE_COMWRAPPERS
637
647
, m_externalComObjectContext{}
638
648
, m_managedObjectComWrapperLock{}
639
- , m_managedObjectComWrapperMap {}
649
+ , m_managedObjectComWrapperSet {}
640
650
#endif // FEATURE_COMWRAPPERS
641
651
#ifdef FEATURE_OBJCMARSHAL
642
652
, m_taggedMemory{}
@@ -805,27 +815,24 @@ class InteropSyncBlockInfo
805
815
#if defined(FEATURE_COMWRAPPERS)
806
816
public:
807
817
#ifndef DACCESS_COMPILE
808
- bool TrySetManagedObjectComWrapper (_In_ INT64 wrapperId, _In_ void * mocw, _In_ void * curr = NULL )
818
+ bool AddManagedObjectComWrapper (_In_ void * mocw)
809
819
{
810
820
LIMITED_METHOD_CONTRACT;
811
821
812
- if (m_managedObjectComWrapperMap == NULL )
822
+ if (m_managedObjectComWrapperSet == NULL )
813
823
{
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 )
816
826
{
817
827
map.SuppressRelease ();
818
828
}
819
829
820
- _ASSERTE (m_managedObjectComWrapperMap != NULL );
830
+ _ASSERTE (m_managedObjectComWrapperSet != NULL );
821
831
}
822
832
823
833
CrstHolder lock (&m_managedObjectComWrapperLock);
824
834
825
- if (m_managedObjectComWrapperMap->LookupPtr (wrapperId) != curr)
826
- return false ;
827
-
828
- m_managedObjectComWrapperMap->Add (wrapperId, mocw);
835
+ m_managedObjectComWrapperSet->Add (mocw);
829
836
return true ;
830
837
}
831
838
#endif // !DACCESS_COMPILE
@@ -854,7 +861,7 @@ class InteropSyncBlockInfo
854
861
void * m_externalComObjectContext;
855
862
856
863
CrstExplicitInit m_managedObjectComWrapperLock;
857
- ManagedObjectComWrapperByIdMap* m_managedObjectComWrapperMap ;
864
+ ManagedObjectComWrapperSet* m_managedObjectComWrapperSet ;
858
865
#endif // FEATURE_COMWRAPPERS
859
866
860
867
#ifdef FEATURE_OBJCMARSHAL
0 commit comments