[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