compobj: Reference the IMalloc pointer in CoInitialize().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42554 Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ba3ca99703
commit
588af8ca85
|
@ -67,6 +67,28 @@ typedef struct
|
||||||
SEGPTR lpVtbl;
|
SEGPTR lpVtbl;
|
||||||
} IMalloc16;
|
} 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)
|
static SEGPTR call_IMalloc_Alloc(SEGPTR iface, DWORD size)
|
||||||
{
|
{
|
||||||
IMalloc16 *malloc = MapSL(iface);
|
IMalloc16 *malloc = MapSL(iface);
|
||||||
|
@ -288,8 +310,9 @@ SEGPTR WINAPI CoMemAlloc(DWORD size, MEMCTX context, DWORD unknown)
|
||||||
HRESULT WINAPI CoInitialize16(SEGPTR malloc)
|
HRESULT WINAPI CoInitialize16(SEGPTR malloc)
|
||||||
{
|
{
|
||||||
if (!malloc)
|
if (!malloc)
|
||||||
CoCreateStandardMalloc16(MEMCTX_TASK, &malloc);
|
CoCreateStandardMalloc16(MEMCTX_TASK, &compobj_malloc);
|
||||||
compobj_malloc = malloc;
|
else
|
||||||
|
call_IMalloc_AddRef(compobj_malloc = malloc);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,8 +324,11 @@ HRESULT WINAPI CoInitialize16(SEGPTR malloc)
|
||||||
*/
|
*/
|
||||||
void WINAPI CoUninitialize16(void)
|
void WINAPI CoUninitialize16(void)
|
||||||
{
|
{
|
||||||
TRACE("()\n");
|
TRACE("\n");
|
||||||
CoFreeAllLibraries();
|
|
||||||
|
CoFreeAllLibraries();
|
||||||
|
call_IMalloc_Release(compobj_malloc);
|
||||||
|
compobj_malloc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue