Mesa (master): st/omx/enc: fix crash on destruction

Christian König deathsimple at kemper.freedesktop.org
Fri Mar 7 08:15:16 UTC 2014


Module: Mesa
Branch: master
Commit: 53d1d879d533db55eed806343f4de28e5d0ae49b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=53d1d879d533db55eed806343f4de28e5d0ae49b

Author: Christian König <christian.koenig at amd.com>
Date:   Sat Mar  1 13:25:58 2014 +0100

st/omx/enc: fix crash on destruction

Signed-off-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/state_trackers/omx/vid_enc.c |   23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/gallium/state_trackers/omx/vid_enc.c b/src/gallium/state_trackers/omx/vid_enc.c
index 993ff57..cd4a25b 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);




More information about the mesa-commit mailing list