From: Christian König Date: Sat, 1 Mar 2014 12:25:58 +0000 (+0100) Subject: st/omx/enc: fix crash on destruction X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=53d1d879d533db55eed806343f4de28e5d0ae49b;p=mesa.git st/omx/enc: fix crash on destruction Signed-off-by: Christian König --- diff --git a/src/gallium/state_trackers/omx/vid_enc.c b/src/gallium/state_trackers/omx/vid_enc.c index 993ff5739b7..cd4a25b753b 100644 --- a/src/gallium/state_trackers/omx/vid_enc.c +++ b/src/gallium/state_trackers/omx/vid_enc.c @@ -182,14 +182,21 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam if (!priv->s_pipe) return OMX_ErrorInsufficientResources; - priv->t_pipe = screen->context_create(screen, priv->screen); - if (!priv->t_pipe) + if (!vl_compositor_init(&priv->compositor, priv->s_pipe)) { + priv->s_pipe->destroy(priv->s_pipe); + priv->s_pipe = NULL; return OMX_ErrorInsufficientResources; + } - if (!vl_compositor_init(&priv->compositor, priv->s_pipe)) + if (!vl_compositor_init_state(&priv->cstate, priv->s_pipe)) { + vl_compositor_cleanup(&priv->compositor); + priv->s_pipe->destroy(priv->s_pipe); + priv->s_pipe = NULL; return OMX_ErrorInsufficientResources; + } - if (!vl_compositor_init_state(&priv->cstate, priv->s_pipe)) + priv->t_pipe = screen->context_create(screen, priv->screen); + if (!priv->t_pipe) return OMX_ErrorInsufficientResources; priv->sPortTypesParam[OMX_PortDomainVideo].nStartPortNumber = 0; @@ -259,15 +266,15 @@ static OMX_ERRORTYPE vid_enc_Destructor(OMX_COMPONENTTYPE *comp) priv->ports=NULL; } - vl_compositor_cleanup_state(&priv->cstate); - vl_compositor_cleanup(&priv->compositor); - for (i = 0; i < OMX_VID_ENC_NUM_SCALING_BUFFERS; ++i) if (priv->scale_buffer[i]) priv->scale_buffer[i]->destroy(priv->scale_buffer[i]); - if (priv->s_pipe) + if (priv->s_pipe) { + vl_compositor_cleanup_state(&priv->cstate); + vl_compositor_cleanup(&priv->compositor); priv->s_pipe->destroy(priv->s_pipe); + } if (priv->t_pipe) priv->t_pipe->destroy(priv->t_pipe);