radeonsi: fix leaking the bound state on destruction v2
authorChristian König <christian.koenig@amd.com>
Fri, 7 Mar 2014 20:52:51 +0000 (21:52 +0100)
committerChristian König <christian.koenig@amd.com>
Sat, 8 Mar 2014 15:08:15 +0000 (16:08 +0100)
v2: rebased on stale pointer fixes

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pm4.c
src/gallium/drivers/radeonsi/si_pm4.h

index ac9e49a9cb8b1a9ba3f6947ec70264aa0a50cfa6..1a44492b63c682310dc5214162009d57cb2bf5ad 100644 (file)
@@ -102,6 +102,8 @@ static void si_destroy_context(struct pipe_context *context)
 
        util_blitter_destroy(sctx->blitter);
 
+       si_pm4_cleanup(sctx);
+
        r600_common_context_cleanup(&sctx->b);
        FREE(sctx);
 }
index 51bf67eccb736c73fa8cce75350f70a420b904e5..0a5673ba9174f9c690771ea57cfeb73d47ac9e5e 100644 (file)
@@ -251,3 +251,10 @@ void si_pm4_reset_emitted(struct si_context *sctx)
 {
        memset(&sctx->emitted, 0, sizeof(sctx->emitted));
 }
+
+void si_pm4_cleanup(struct si_context *sctx)
+{
+       for (int i = 0; i < NUMBER_OF_STATES; ++i) {
+               si_pm4_free_state(sctx, sctx->queued.array[i], i);
+       }
+}
index c9bc091173fee53564805125839834388157350a..e1d0cac3b73220b60f4b6f3daef134208cbfb865 100644 (file)
@@ -91,5 +91,6 @@ unsigned si_pm4_dirty_dw(struct si_context *sctx);
 void si_pm4_emit(struct si_context *sctx, struct si_pm4_state *state);
 void si_pm4_emit_dirty(struct si_context *sctx);
 void si_pm4_reset_emitted(struct si_context *sctx);
+void si_pm4_cleanup(struct si_context *sctx);
 
 #endif