From c29b2c432100763b10f9b94acc068be712811778 Mon Sep 17 00:00:00 2001 From: mateoatr Date: Mon, 9 Dec 2019 17:11:22 +0000 Subject: [PATCH] Destroy handle on UMEntryThunk::Terminate --- src/coreclr/src/vm/comdelegate.cpp | 4 +--- src/coreclr/src/vm/dllimportcallback.cpp | 6 ++++++ src/coreclr/src/vm/dllimportcallback.h | 16 ---------------- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/coreclr/src/vm/comdelegate.cpp b/src/coreclr/src/vm/comdelegate.cpp index a1e403b..c703333 100644 --- a/src/coreclr/src/vm/comdelegate.cpp +++ b/src/coreclr/src/vm/comdelegate.cpp @@ -1307,9 +1307,7 @@ LPVOID COMDelegate::ConvertToCallback(OBJECTREF pDelegateObj) umHolder.Assign(pUMEntryThunk); // multicast. go thru Invoke - OBJECTHANDLE objhnd = pUMEntryThunk->GetObjectHandle(); - if (objhnd == NULL) - objhnd = GetAppDomain()->CreateLongWeakHandle(pDelegate); + OBJECTHANDLE objhnd = GetAppDomain()->CreateLongWeakHandle(pDelegate); _ASSERTE(objhnd != NULL); // This target should not ever be used. We are storing it in the thunk for better diagnostics of "call on collected delegate" crashes. diff --git a/src/coreclr/src/vm/dllimportcallback.cpp b/src/coreclr/src/vm/dllimportcallback.cpp index 3960ba8..3c8b501 100644 --- a/src/coreclr/src/vm/dllimportcallback.cpp +++ b/src/coreclr/src/vm/dllimportcallback.cpp @@ -961,12 +961,18 @@ void UMEntryThunk::Terminate() CONTRACTL { NOTHROW; + MODE_ANY; } CONTRACTL_END; m_code.Poison(); s_thunkFreeList.AddToList(this); + + if (GetObjectHandle()) + { + DestroyLongWeakHandle(GetObjectHandle()); + } } VOID UMEntryThunk::FreeUMEntryThunk(UMEntryThunk* p) diff --git a/src/coreclr/src/vm/dllimportcallback.h b/src/coreclr/src/vm/dllimportcallback.h index 6c909cb..6fe9e64 100644 --- a/src/coreclr/src/vm/dllimportcallback.h +++ b/src/coreclr/src/vm/dllimportcallback.h @@ -310,22 +310,6 @@ public: #endif } - ~UMEntryThunk() - { - CONTRACTL - { - NOTHROW; - GC_NOTRIGGER; - MODE_ANY; - } - CONTRACTL_END; - - if (GetObjectHandle()) - { - DestroyLongWeakHandle(GetObjectHandle()); - } - } - void Terminate(); VOID RunTimeInit() -- 2.7.4