r600g: Cleanup the fenced_bo list in r600_context_fini().
authorHenri Verbeet <hverbeet@gmail.com>
Mon, 15 Nov 2010 21:18:12 +0000 (22:18 +0100)
committerHenri Verbeet <hverbeet@gmail.com>
Mon, 15 Nov 2010 21:20:12 +0000 (22:20 +0100)
src/gallium/winsys/r600/drm/r600_hw_context.c

index 37e5baf8de8832bc35879de9e5a67e3c32619f60..b2a11251bc61e90182323305fd2ab47b70c08473 100644 (file)
@@ -593,6 +593,17 @@ static int r600_loop_const_init(struct r600_context *ctx, u32 offset)
        return r600_context_add_block(ctx, r600_loop_consts, nreg);
 }
 
+static void r600_context_clear_fenced_bo(struct r600_context *ctx)
+{
+       struct radeon_bo *bo, *tmp;
+
+       LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &ctx->fenced_bo, fencedlist) {
+               LIST_DELINIT(&bo->fencedlist);
+               bo->fence = 0;
+               bo->ctx = NULL;
+       }
+}
+
 /* initialize */
 void r600_context_fini(struct r600_context *ctx)
 {
@@ -616,6 +627,8 @@ void r600_context_fini(struct r600_context *ctx)
        free(ctx->reloc);
        free(ctx->bo);
        free(ctx->pm4);
+
+       r600_context_clear_fenced_bo(ctx);
        if (ctx->fence_bo) {
                r600_bo_reference(ctx->radeon, &ctx->fence_bo, NULL);
        }