From: Zebediah Figura Subject: [PATCH 4/5] winegstreamer: Make sure the pipeline state is NULL before removing output pins. Message-Id: <1519179182-627-4-git-send-email-z.figura12@gmail.com> Date: Tue, 20 Feb 2018 20:13:01 -0600 In-Reply-To: <1519179182-627-1-git-send-email-z.figura12@gmail.com> References: <1519179182-627-1-git-send-email-z.figura12@gmail.com> 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 ebc9918..8e3783e 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1911,7 +1911,6 @@ static HRESULT GST_RemoveOutputPins(GSTImpl *This) { HRESULT hr; ULONG i; - GSTOutPin **ppOldPins = This->ppPins; TRACE("(%p)\n", This); mark_wine_thread(); @@ -1925,17 +1924,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