ole32: Release iobject and the IRpcStubBuffer object no matter which code path we take.
Otherwise we would leak a reference for both of these if the ifstub was already created. Fix the FIXME in the code by releasing the stub manager if necessary.
This commit is contained in:
parent
65f1d6a38e
commit
723592cf5a
|
@ -155,17 +155,18 @@ HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkno
|
|||
/* make sure ifstub that we are creating is unique */
|
||||
ifstub = stub_manager_find_ifstub(manager, riid, mshlflags);
|
||||
if (!ifstub)
|
||||
{
|
||||
ifstub = stub_manager_new_ifstub(manager, stub, iobject, riid, mshlflags);
|
||||
IUnknown_Release(iobject);
|
||||
if (stub) IRpcStubBuffer_Release(stub);
|
||||
if (!ifstub)
|
||||
{
|
||||
stub_manager_int_release(manager);
|
||||
/* FIXME: should we do another release to completely destroy the
|
||||
* stub manager? */
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (stub) IRpcStubBuffer_Release(stub);
|
||||
IUnknown_Release(iobject);
|
||||
|
||||
if (!ifstub)
|
||||
{
|
||||
stub_manager_int_release(manager);
|
||||
/* destroy the stub manager if it has no ifstubs by releasing
|
||||
* zero external references */
|
||||
stub_manager_ext_release(manager, 0, TRUE);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (!tablemarshal)
|
||||
|
|
Loading…
Reference in New Issue