Check if a UMEntryThunk has an existing handle
authormateoatr <matorre@microsoft.com>
Fri, 6 Dec 2019 23:42:52 +0000 (23:42 +0000)
committermateoatr <matorre@microsoft.com>
Fri, 6 Dec 2019 23:42:52 +0000 (23:42 +0000)
before creating a new one.

src/coreclr/src/vm/comdelegate.cpp

index c703333..a1e403b 100644 (file)
@@ -1307,7 +1307,9 @@ LPVOID COMDelegate::ConvertToCallback(OBJECTREF pDelegateObj)
             umHolder.Assign(pUMEntryThunk);
 
             // multicast. go thru Invoke
-            OBJECTHANDLE objhnd = GetAppDomain()->CreateLongWeakHandle(pDelegate);
+            OBJECTHANDLE objhnd = pUMEntryThunk->GetObjectHandle();
+            if (objhnd == NULL)
+                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.