From: mateoatr Date: Mon, 9 Dec 2019 17:11:22 +0000 (+0000) Subject: Destroy handle on UMEntryThunk::Terminate X-Git-Tag: submit/tizen/20210909.063632~10736^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c29b2c432100763b10f9b94acc068be712811778;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Destroy handle on UMEntryThunk::Terminate --- 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()