[PATCH v2 4/5] winegstreamer: Make sure the pipeline state is NULL before removing output pins.
Andrew Eikum
aeikum at codeweavers.com
Thu Feb 22 11:13:08 CST 2018
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
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 <z.figura12 at gmail.com>
> ---
> 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
>
>
>
More information about the wine-devel
mailing list