Skip to content

Commit 2932bf3

Browse files
committed
Remove wrapper ID as a concept entirely
1 parent d673663 commit 2932bf3

File tree

5 files changed

+28
-25
lines changed

5 files changed

+28
-25
lines changed

src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,13 @@ public static unsafe partial void GetIUnknownImpl(out IntPtr fpQueryInterface, o
2323
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_GetIUnknownImpl")]
2424
private static partial void GetIUnknownImplInternal(out IntPtr fpQueryInterface, out IntPtr fpAddRef, out IntPtr fpRelease);
2525

26-
private static long s_instanceCounter;
27-
private readonly long id = Interlocked.Increment(ref s_instanceCounter);
28-
2926
unsafe partial void RegisterManagedObjectWrapperForDiagnostics(object instance, ManagedObjectWrapper* wrapper)
3027
{
31-
RegisterManagedObjectWrapperForDiagnosticsInternal(ObjectHandleOnStack.Create(ref instance), wrapper, id);
28+
RegisterManagedObjectWrapperForDiagnosticsInternal(ObjectHandleOnStack.Create(ref instance), wrapper);
3229
}
3330

3431
[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "ComWrappers_RegisterManagedObjectWrapperForDiagnostics")]
35-
private static unsafe partial void RegisterManagedObjectWrapperForDiagnosticsInternal(ObjectHandleOnStack instance, ManagedObjectWrapper* wrapper, long wrapperId);
32+
private static unsafe partial void RegisterManagedObjectWrapperForDiagnosticsInternal(ObjectHandleOnStack instance, ManagedObjectWrapper* wrapper);
3633

3734
static partial void RegisterNativeObjectWrapperForDiagnostics(NativeObjectWrapper registeredWrapper)
3835
{

src/coreclr/debug/daccess/request.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5086,14 +5086,14 @@ HRESULT ClrDataAccess::GetObjectComWrappersData(CLRDATA_ADDRESS objAddr, CLRDATA
50865086
*rcw = TO_TADDR(pInfo->m_externalComObjectContext);
50875087
}
50885088

5089-
DPTR(NewHolder<ManagedObjectComWrapperByIdMap>) mapHolder(PTR_TO_MEMBER_TADDR(InteropSyncBlockInfo, pInfo, m_managedObjectComWrapperMap));
5090-
DPTR(ManagedObjectComWrapperByIdMap *)ppMap(PTR_TO_MEMBER_TADDR(NewHolder<ManagedObjectComWrapperByIdMap>, mapHolder, m_value));
5091-
DPTR(ManagedObjectComWrapperByIdMap) pMap(TO_TADDR(*ppMap));
5089+
DPTR(NewHolder<ManagedObjectComWrapperSet>) mapHolder(PTR_TO_MEMBER_TADDR(InteropSyncBlockInfo, pInfo, m_managedObjectComWrapperSet));
5090+
DPTR(ManagedObjectComWrapperSet *)ppMap(PTR_TO_MEMBER_TADDR(NewHolder<ManagedObjectComWrapperSet>, mapHolder, m_value));
5091+
DPTR(ManagedObjectComWrapperSet) pMap(TO_TADDR(*ppMap));
50925092

50935093
CQuickArrayList<CLRDATA_ADDRESS> comWrappers;
50945094
if (pMap != NULL)
50955095
{
5096-
ManagedObjectComWrapperByIdMap::Iterator iter = pMap->Begin();
5096+
ManagedObjectComWrapperSet::Iterator iter = pMap->Begin();
50975097
while (iter != pMap->End())
50985098
{
50995099
comWrappers.Push(TO_CDADDR(iter->Value()));

src/coreclr/vm/interoplibinterface_comwrappers.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,7 @@ extern "C" void QCALLTYPE ComWrappers_GetTaggedImpl(
225225

226226
extern "C" void QCALLTYPE ComWrappers_RegisterManagedObjectWrapperForDiagnostics(
227227
_In_ QCall::ObjectHandleOnStack obj,
228-
_In_ void* wrapper,
229-
_In_ long wrapperId)
228+
_In_ void* wrapper)
230229
{
231230
QCALL_CONTRACT;
232231

@@ -242,7 +241,7 @@ extern "C" void QCALLTYPE ComWrappers_RegisterManagedObjectWrapperForDiagnostics
242241
InteropSyncBlockInfo* interopInfo = syncBlock->GetInteropInfo();
243242
_ASSERTE(syncBlock->IsPrecious());
244243

245-
interopInfo->TrySetManagedObjectComWrapper(wrapperId, wrapper);
244+
interopInfo->AddManagedObjectComWrapper(wrapper);
246245

247246
GCPROTECT_END();
248247

src/coreclr/vm/syncblk.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ InteropSyncBlockInfo::~InteropSyncBlockInfo()
7171
FreeUMEntryThunk();
7272

7373
#if defined(FEATURE_COMWRAPPERS)
74-
delete m_managedObjectComWrapperMap;
74+
delete m_managedObjectComWrapperSet;
7575
#endif // FEATURE_COMWRAPPERS
7676
}
7777

src/coreclr/vm/syncblk.h

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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*>>;
616626
class 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)
806816
public:
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

Comments
 (0)