From: Andrew Eikum Subject: Re: [PATCH v2 4/5] winegstreamer: Make sure the pipeline state is NULL before removing output pins. Message-Id: <20180222171307.yeavha2q2wh2ahe4@foghorn.codeweavers.com> Date: Thu, 22 Feb 2018 11:13:08 -0600 In-Reply-To: <1519311977-13458-4-git-send-email-z.figura12@gmail.com> References: <1519311977-13458-1-git-send-email-z.figura12@gmail.com> <1519311977-13458-4-git-send-email-z.figura12@gmail.com> Signed-off-by: Andrew Eikum On Thu, Feb 22, 2018 at 09:06:16AM -0600, Zebediah Figura wrote: > Source pads can be created asynchronously, so they might not be created until > during the call to gst_element_set_state(). Therefore don't copy This->ppPins > into a local variable. > > This condition can be triggered by failing to demux a stream. > > Signed-off-by: Zebediah Figura > --- > dlls/winegstreamer/gstdemux.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c > index 8ccf0ad..518d995 100644 > --- a/dlls/winegstreamer/gstdemux.c > +++ b/dlls/winegstreamer/gstdemux.c > @@ -1913,7 +1913,6 @@ static HRESULT GST_RemoveOutputPins(GSTImpl *This) > { > HRESULT hr; > ULONG i; > - GSTOutPin **ppOldPins = This->ppPins; > > TRACE("(%p)\n", This); > mark_wine_thread(); > @@ -1927,17 +1926,17 @@ static HRESULT GST_RemoveOutputPins(GSTImpl *This) > This->my_src = This->their_sink = NULL; > > for (i = 0; i < This->cStreams; i++) { > - hr = BaseOutputPinImpl_BreakConnect(&ppOldPins[i]->pin); > + hr = BaseOutputPinImpl_BreakConnect(&This->ppPins[i]->pin); > TRACE("Disconnect: %08x\n", hr); > - IPin_Release(&ppOldPins[i]->pin.pin.IPin_iface); > + IPin_Release(&This->ppPins[i]->pin.pin.IPin_iface); > } > This->cStreams = 0; > + CoTaskMemFree(This->ppPins); > This->ppPins = NULL; > gst_element_set_bus(This->container, NULL); > gst_object_unref(This->container); > This->container = NULL; > BaseFilterImpl_IncrementPinVersion(&This->filter); > - CoTaskMemFree(ppOldPins); > return S_OK; > } > > -- > 2.7.4 > > >