From: Zebediah Figura Subject: [PATCH 5/7] compobj: Reference the IMalloc pointer in CoInitialize(). Message-Id: <20200115062433.778937-5-z.figura12@gmail.com> Date: Wed, 15 Jan 2020 00:24:31 -0600 In-Reply-To: <20200115062433.778937-1-z.figura12@gmail.com> References: <20200115062433.778937-1-z.figura12@gmail.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42554 Signed-off-by: Zebediah Figura --- dlls/compobj.dll16/compobj.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/dlls/compobj.dll16/compobj.c b/dlls/compobj.dll16/compobj.c index 44a7091ef1..52e5d72688 100644 --- a/dlls/compobj.dll16/compobj.c +++ b/dlls/compobj.dll16/compobj.c @@ -67,6 +67,28 @@ typedef struct SEGPTR lpVtbl; } IMalloc16; +static ULONG call_IMalloc_AddRef(SEGPTR iface) +{ + IMalloc16 *malloc = MapSL(iface); + IMalloc16Vtbl *vtbl = MapSL(malloc->lpVtbl); + DWORD args[1], ret; + + args[0] = iface; + WOWCallback16Ex(vtbl->AddRef, WCB16_CDECL, sizeof(args), args, &ret); + return ret; +} + +static ULONG call_IMalloc_Release(SEGPTR iface) +{ + IMalloc16 *malloc = MapSL(iface); + IMalloc16Vtbl *vtbl = MapSL(malloc->lpVtbl); + DWORD args[1], ret; + + args[0] = iface; + WOWCallback16Ex(vtbl->Release, WCB16_CDECL, sizeof(args), args, &ret); + return ret; +} + static SEGPTR call_IMalloc_Alloc(SEGPTR iface, DWORD size) { IMalloc16 *malloc = MapSL(iface); @@ -288,8 +310,9 @@ SEGPTR WINAPI CoMemAlloc(DWORD size, MEMCTX context, DWORD unknown) HRESULT WINAPI CoInitialize16(SEGPTR malloc) { if (!malloc) - CoCreateStandardMalloc16(MEMCTX_TASK, &malloc); - compobj_malloc = malloc; + CoCreateStandardMalloc16(MEMCTX_TASK, &compobj_malloc); + else + call_IMalloc_AddRef(compobj_malloc = malloc); return S_OK; } @@ -301,8 +324,11 @@ HRESULT WINAPI CoInitialize16(SEGPTR malloc) */ void WINAPI CoUninitialize16(void) { - TRACE("()\n"); - CoFreeAllLibraries(); + TRACE("\n"); + + CoFreeAllLibraries(); + call_IMalloc_Release(compobj_malloc); + compobj_malloc = 0; } /*********************************************************************** -- 2.25.0