[Mesa-dev] [PATCH 1/5] st/xvmc: use goto to make code more readable (v2)

Nayan Deshmukh nayan26deshmukh at gmail.com
Fri Dec 16 11:58:02 UTC 2016


v2: add missing semicolon

Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com>
---
 src/gallium/state_trackers/xvmc/context.c | 40 +++++++++++++++----------------
 1 file changed, 19 insertions(+), 21 deletions(-)

diff --git a/src/gallium/state_trackers/xvmc/context.c b/src/gallium/state_trackers/xvmc/context.c
index e9014c8..fb9f435 100644
--- a/src/gallium/state_trackers/xvmc/context.c
+++ b/src/gallium/state_trackers/xvmc/context.c
@@ -226,23 +226,20 @@ Status XvMCCreateContext(Display *dpy, XvPortID port, int surface_type_id,
 
    context_priv = CALLOC(1, sizeof(XvMCContextPrivate));
    if (!context_priv)
-      return BadAlloc;
+      goto no_context_priv;
 
    /* TODO: Reuse screen if process creates another context */
    vscreen = vl_dri2_screen_create(dpy, scrn);
 
    if (!vscreen) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL screen.\n");
-      FREE(context_priv);
-      return BadAlloc;
+      goto no_screen;
    }
 
    pipe = vscreen->pscreen->context_create(vscreen->pscreen, vscreen, 0);
    if (!pipe) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL context.\n");
-      vscreen->destroy(vscreen);
-      FREE(context_priv);
-      return BadAlloc;
+      goto no_context;
    }
 
    templat.profile = ProfileToPipe(mc_type);
@@ -257,29 +254,17 @@ Status XvMCCreateContext(Display *dpy, XvPortID port, int surface_type_id,
 
    if (!context_priv->decoder) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL decoder.\n");
-      pipe->destroy(pipe);
-      vscreen->destroy(vscreen);
-      FREE(context_priv);
-      return BadAlloc;
+      goto no_decoder;
    }
 
    if (!vl_compositor_init(&context_priv->compositor, pipe)) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL compositor.\n");
-      context_priv->decoder->destroy(context_priv->decoder);
-      pipe->destroy(pipe);
-      vscreen->destroy(vscreen);
-      FREE(context_priv);
-      return BadAlloc;
+      goto no_compositor;
    }
 
    if (!vl_compositor_init_state(&context_priv->cstate, pipe)) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL compositor state.\n");
-      vl_compositor_cleanup(&context_priv->compositor);
-      context_priv->decoder->destroy(context_priv->decoder);
-      pipe->destroy(pipe);
-      vscreen->destroy(vscreen);
-      FREE(context_priv);
-      return BadAlloc;
+      goto no_compositor_state;
    }
 
 
@@ -313,6 +298,19 @@ Status XvMCCreateContext(Display *dpy, XvPortID port, int surface_type_id,
    XVMC_MSG(XVMC_TRACE, "[XvMC] Context %p created.\n", context);
 
    return Success;
+
+no_compositor_state:
+   vl_compositor_cleanup(&context_priv->compositor);
+no_compositor:
+   context_priv->decoder->destroy(context_priv->decoder);
+no_decoder:
+   pipe->destroy(pipe);
+no_context:
+   vscreen->destroy(vscreen);
+no_screen:
+   FREE(context_priv);
+no_context_priv:
+   return BadAlloc;
 }
 
 PUBLIC
-- 
2.9.3



More information about the mesa-dev mailing list