From: Zebediah Figura Subject: Re: [PATCH] mp3dmod: Support COM aggregation. Message-Id: <82ca4983-2298-c2e7-58a9-e3f22226e2c0@codeweavers.com> Date: Fri, 22 Jun 2018 13:36:20 -0500 In-Reply-To: <5fa91634-321e-ae5a-5cc3-a048b9e03782@codeweavers.com> References: <1529690760-3564-1-git-send-email-zfigura@codeweavers.com> <5fa91634-321e-ae5a-5cc3-a048b9e03782@codeweavers.com> On 06/22/2018 01:22 PM, Jacek Caban wrote: > Hi Zebediah, > > On 06/22/2018 08:06 PM, Zebediah Figura wrote: >> -static HRESULT create_mp3_decoder(REFIID iid, void **obj) >> +static HRESULT create_mp3_decoder(IUnknown *outer, REFIID iid, void **obj) >> { >> struct mp3_decoder *This; >> int err; >> @@ -424,15 +457,17 @@ static HRESULT create_mp3_decoder(REFIID iid, void **obj) >> if (!(This = heap_alloc_zero(sizeof(*This)))) >> return E_OUTOFMEMORY; >> >> - This->IMediaObject_iface.lpVtbl = &IMediaObject_vtbl; >> + This->IUnknown_inner.lpVtbl = &Unknown_vtbl; >> + This->IMediaObject_iface.lpVtbl = &MediaObject_vtbl; >> This->ref = 0; >> + This->outer = outer ? outer : &This->IUnknown_inner; >> >> mpg123_init(); >> This->mh = mpg123_new(NULL, &err); >> mpg123_open_feed(This->mh); >> mpg123_format_none(This->mh); >> >> - return IMediaObject_QueryInterface(&This->IMediaObject_iface, iid, obj); >> + return IUnknown_QueryInterface(&This->IUnknown_inner, iid, obj); > > > This leaks in non-aggregated case if QueryInterface fails. > > > Jacek > Thanks; I've sent an updated patch.