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

Nayan Deshmukh nayan26deshmukh at gmail.com
Fri Dec 23 07:21:33 UTC 2016


On Thu, Dec 22, 2016 at 4:56 PM, Christian König
<deathsimple at vodafone.de> wrote:
> Am 16.12.2016 um 12:58 schrieb Nayan Deshmukh:
>>
>> v2: add missing semicolon
>>
>> Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com>
>
>
> Patch #2-#4 are Reviewed-by: Christian König <christian.koenig at amd.com>.
>
> For patch #1 and #5 I'm a bit hesitated to add them without testing.

I agree with you, maybe we can commit patch #2-#4 for now and meanwhile I will
try to do some testing with XvMC.

> XvMC isn't widely used any more, but we should still try to not break it.
>
> Maybe you can try to come up with something?
I am not able to run XvMC on my system now, but I'll try it some more later in
the evening.

Regards,
Nayan
>
> Regards,
> Christian.
>
>
>> ---
>>   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
>
>
>


More information about the mesa-dev mailing list