Mesa (master): r600g: release query buffers in destroy_query

Marek Olšák mareko at kemper.freedesktop.org
Mon Mar 5 05:56:51 PST 2012


Module: Mesa
Branch: master
Commit: eabcecc26baf225dc50f1d400a80ea4c78831390
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=eabcecc26baf225dc50f1d400a80ea4c78831390

Author: Marek Olšák <maraeo at gmail.com>
Date:   Thu Feb 23 22:45:45 2012 +0100

r600g: release query buffers in destroy_query

This fixes a memory leak introduced with the rework.

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/drivers/r600/r600_query.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_query.c b/src/gallium/drivers/r600/r600_query.c
index a896f03..25731c2 100644
--- a/src/gallium/drivers/r600/r600_query.c
+++ b/src/gallium/drivers/r600/r600_query.c
@@ -264,6 +264,15 @@ static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned q
 static void r600_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
 {
 	struct r600_query *rquery = (struct r600_query*)query;
+	struct r600_query_buffer *prev = rquery->buffer.previous;
+
+	/* Release all query buffers. */
+	while (prev) {
+		struct r600_query_buffer *qbuf = prev;
+		prev = prev->previous;
+		pipe_resource_reference((struct pipe_resource**)&qbuf->buf, NULL);
+		FREE(qbuf);
+	}
 
 	pipe_resource_reference((struct pipe_resource**)&rquery->buffer.buf, NULL);
 	FREE(query);



More information about the mesa-commit mailing list