diff --git a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs index 890bff5ec3c7ec..0693991d3cb753 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs @@ -1265,9 +1265,18 @@ private unsafe IntPtr ConvertLayoutToNative(object pManagedHome, int dwFlags) IntPtr pNativeHome = Marshal.AllocCoTaskMem(allocSize); // marshal the object as class with layout (UnmanagedType.LPStruct) - if (IsIn(dwFlags)) + try + { + if (IsIn(dwFlags)) + { + StubHelpers.LayoutTypeConvertToUnmanaged(pManagedHome, (byte*)pNativeHome, ref cleanupWorkList); + } + } + catch { - StubHelpers.LayoutTypeConvertToUnmanaged(pManagedHome, (byte*)pNativeHome, ref cleanupWorkList); + StubHelpers.DestroyCleanupList(ref cleanupWorkList); + Marshal.FreeCoTaskMem(pNativeHome); + throw; } if (IsOut(dwFlags)) {