[Mesa-dev] [PATCH] xa: don't leak fences

Marek Olšák maraeo at gmail.com
Fri Jul 10 04:12:38 PDT 2015


I wonder... do we still need XA considering that everybody can just
use glamor instead?

Marek


On Wed, Jul 8, 2015 at 7:39 PM, Rob Clark <robdclark at gmail.com> wrote:
> From: Rob Clark <robclark at freedesktop.org>
>
> XA was never unref'ing last_fence in the various call paths to
> pipe->flush().  Add this to xa_context_flush() and update the other
> open-coded calls to pipe->flush() to use xa_context_flush() instead.
>
> This fixes a memory leak reported with xf86-video-freedreno.
>
> Reported-by: Nicolas Dechesne <nicolas.dechesne at linaro.org>
> Cc: "10.5 10.6" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
>  src/gallium/state_trackers/xa/xa_context.c | 6 +++++-
>  src/gallium/state_trackers/xa/xa_tracker.c | 2 +-
>  src/gallium/state_trackers/xa/xa_yuv.c     | 2 +-
>  3 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/xa/xa_context.c b/src/gallium/state_trackers/xa/xa_context.c
> index fd49c82..ebfb290 100644
> --- a/src/gallium/state_trackers/xa/xa_context.c
> +++ b/src/gallium/state_trackers/xa/xa_context.c
> @@ -37,7 +37,11 @@
>  XA_EXPORT void
>  xa_context_flush(struct xa_context *ctx)
>  {
> -       ctx->pipe->flush(ctx->pipe, &ctx->last_fence, 0);
> +    if (ctx->last_fence) {
> +        struct pipe_screen *screen = ctx->xa->screen;
> +        screen->fence_reference(screen, &ctx->last_fence, NULL);
> +    }
> +    ctx->pipe->flush(ctx->pipe, &ctx->last_fence, 0);
>  }
>
>  XA_EXPORT struct xa_context *
> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
> index a384c1c..1df1da7 100644
> --- a/src/gallium/state_trackers/xa/xa_tracker.c
> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
> @@ -464,7 +464,7 @@ xa_surface_redefine(struct xa_surface *srf,
>                         xa_min(save_height, template->height0), &src_box);
>         pipe->resource_copy_region(pipe, texture,
>                                    0, 0, 0, 0, srf->tex, 0, &src_box);
> -       pipe->flush(pipe, &xa->default_ctx->last_fence, 0);
> +       xa_context_flush(xa->default_ctx);
>      }
>
>      pipe_resource_reference(&srf->tex, texture);
> diff --git a/src/gallium/state_trackers/xa/xa_yuv.c b/src/gallium/state_trackers/xa/xa_yuv.c
> index 1519639..97a1833 100644
> --- a/src/gallium/state_trackers/xa/xa_yuv.c
> +++ b/src/gallium/state_trackers/xa/xa_yuv.c
> @@ -154,7 +154,7 @@ xa_yuv_planar_blit(struct xa_context *r,
>         box++;
>      }
>
> -    r->pipe->flush(r->pipe, &r->last_fence, 0);
> +    xa_context_flush(r);
>
>      xa_ctx_sampler_views_destroy(r);
>      xa_ctx_srf_destroy(r);
> --
> 2.4.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list