[Mesa-dev] [PATCH 3/4] radeonsi: fix leaking the bound state on destruction v2

Christian König deathsimple at vodafone.de
Sat Mar 8 05:54:39 PST 2014


From: Christian König <christian.koenig at amd.com>

v2: rebased on stale pointer fixes

Signed-off-by: Christian König <christian.koenig at amd.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
 src/gallium/drivers/radeonsi/si_pipe.c | 2 ++
 src/gallium/drivers/radeonsi/si_pm4.c  | 7 +++++++
 src/gallium/drivers/radeonsi/si_pm4.h  | 1 +
 3 files changed, 10 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index ac9e49a..1a44492 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -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);
 }
diff --git a/src/gallium/drivers/radeonsi/si_pm4.c b/src/gallium/drivers/radeonsi/si_pm4.c
index 51bf67e..0a5673b 100644
--- a/src/gallium/drivers/radeonsi/si_pm4.c
+++ b/src/gallium/drivers/radeonsi/si_pm4.c
@@ -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);
+	}
+}
diff --git a/src/gallium/drivers/radeonsi/si_pm4.h b/src/gallium/drivers/radeonsi/si_pm4.h
index c9bc091..e1d0cac 100644
--- a/src/gallium/drivers/radeonsi/si_pm4.h
+++ b/src/gallium/drivers/radeonsi/si_pm4.h
@@ -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
-- 
1.8.3.2



More information about the mesa-dev mailing list