[Spice-devel] [PATCH v2 3/3] style: prefer early return to large if blocks

Frediano Ziglio fziglio at redhat.com
Wed Nov 4 05:12:36 PST 2015


> 
> ---
>  server/red_worker.c | 46 ++++++++++++++++++++++++----------------------
>  1 file changed, 24 insertions(+), 22 deletions(-)
> 
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 9738e98..e23c460 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -991,11 +991,12 @@ static void release_image_item(ImageItem *item)
>  
>  static void release_upgrade_item(RedWorker* worker, UpgradeItem *item)
>  {
> -    if (!--item->refs) {
> -        red_worker_drawable_unref(worker, item->drawable);
> -        free(item->rects);
> -        free(item);
> -    }
> +    if (--item->refs)
> +        return;
> +
> +    red_worker_drawable_unref(worker, item->drawable);
> +    free(item->rects);
> +    free(item);
>  }
>  
>  static uint8_t *common_alloc_recv_buf(RedChannelClient *rcc, uint16_t type,
>  uint32_t size)
> @@ -1192,27 +1193,28 @@ static void red_worker_drawable_unref(RedWorker
> *worker, Drawable *drawable)
>  {
>      RingItem *item, *next;
>  
> -    if (!--drawable->refs) {
> -        spice_assert(!drawable->tree_item.shadow);
> -        spice_assert(ring_is_empty(&drawable->pipes));
> +    if (--drawable->refs)
> +        return;
>  
> -        if (drawable->stream) {
> -            red_detach_stream(worker, drawable->stream, TRUE);
> -        }
> -        region_destroy(&drawable->tree_item.base.rgn);
> +    spice_return_if_fail(!drawable->tree_item.shadow);
> +    spice_return_if_fail(ring_is_empty(&drawable->pipes));
>  

Here 2 spice_assert are converted to spice_return_if_fail.
They are just adding more leaks to happened leaks.
I would possibly suggest spice_warn_if or even better something like

   if (condition)
      spice_critical(message);

> -        remove_drawable_dependencies(worker, drawable);
> -        red_dec_surfaces_drawable_dependencies(worker, drawable);
> -        red_destroy_surface(worker, drawable->surface_id);
> +    if (drawable->stream) {
> +        red_detach_stream(worker, drawable->stream, TRUE);
> +    }
> +    region_destroy(&drawable->tree_item.base.rgn);
>  
> -        RING_FOREACH_SAFE(item, next, &drawable->glz_ring) {
> -            SPICE_CONTAINEROF(item, RedGlzDrawable, drawable_link)->drawable
> = NULL;
> -            ring_remove(item);
> -        }
> -        put_red_drawable(worker, drawable->red_drawable,
> drawable->group_id);
> -        free_drawable(worker, drawable);
> -        worker->drawable_count--;
> +    remove_drawable_dependencies(worker, drawable);
> +    red_dec_surfaces_drawable_dependencies(worker, drawable);
> +    red_destroy_surface(worker, drawable->surface_id);
> +
> +    RING_FOREACH_SAFE(item, next, &drawable->glz_ring) {
> +        SPICE_CONTAINEROF(item, RedGlzDrawable, drawable_link)->drawable =
> NULL;
> +        ring_remove(item);
>      }
> +    put_red_drawable(worker, drawable->red_drawable, drawable->group_id);
> +    free_drawable(worker, drawable);
> +    worker->drawable_count--;
>  }
>  
>  static inline void remove_shadow(RedWorker *worker, DrawItem *item)
> --
> 2.4.3
> 

Frediano


More information about the Spice-devel mailing list