diff options
author | Rob Clark <robclark@freedesktop.org> | 2015-07-08 13:30:22 -0400 |
---|---|---|
committer | Rob Clark <robclark@freedesktop.org> | 2015-07-10 11:57:30 -0400 |
commit | 0a8af6361eecaba0f34a668328746924b61caa6a (patch) | |
tree | 675f3a7c9bd82f7ea5f08adc9d8ccb2c432bfaf9 /src/gallium/state_trackers/xa | |
parent | f12302b89836a24255674a251f7a6902b4e9af7c (diff) | |
download | external_mesa3d-0a8af6361eecaba0f34a668328746924b61caa6a.zip external_mesa3d-0a8af6361eecaba0f34a668328746924b61caa6a.tar.gz external_mesa3d-0a8af6361eecaba0f34a668328746924b61caa6a.tar.bz2 |
xa: don't leak fences
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@linaro.org>
Cc: "10.5 10.6" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Diffstat (limited to 'src/gallium/state_trackers/xa')
-rw-r--r-- | src/gallium/state_trackers/xa/xa_context.c | 6 | ||||
-rw-r--r-- | src/gallium/state_trackers/xa/xa_tracker.c | 2 | ||||
-rw-r--r-- | 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 f69ac8e..59e8108 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.c +++ b/src/gallium/state_trackers/xa/xa_tracker.c @@ -461,7 +461,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); |