From 01ce73cb2ebaa8d0e9d4025371849459a8e0ffd2 Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Tue, 11 Aug 2020 19:52:55 -0400 Subject: Fix memory leaked caused by Marshal.GetFunctionPointerForDelegate (#28074) --- src/vm/dllimportcallback.cpp | 7 +++++++ src/vm/dllimportcallback.h | 16 ---------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/vm/dllimportcallback.cpp b/src/vm/dllimportcallback.cpp index b5a4c9c4d7..8c4970970b 100644 --- a/src/vm/dllimportcallback.cpp +++ b/src/vm/dllimportcallback.cpp @@ -961,11 +961,18 @@ void UMEntryThunk::Terminate() CONTRACTL { NOTHROW; + MODE_ANY; } CONTRACTL_END; m_code.Poison(); + if (GetObjectHandle()) + { + DestroyLongWeakHandle(GetObjectHandle()); + m_pObjectHandle = 0; + } + s_thunkFreeList.AddToList(this); } diff --git a/src/vm/dllimportcallback.h b/src/vm/dllimportcallback.h index 3d93d3263b..03be244e54 100644 --- a/src/vm/dllimportcallback.h +++ b/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() -- cgit v1.2.3