Mesa (mesa_7_7_branch): i965: Fix several memory leaks on exit.

Eric Anholt anholt at kemper.freedesktop.org
Sat Nov 21 12:35:06 UTC 2009


Module: Mesa
Branch: mesa_7_7_branch
Commit: 8451b29d9628f09b65962385bfbd95cd7f26427f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8451b29d9628f09b65962385bfbd95cd7f26427f

Author: Eric Anholt <eric at anholt.net>
Date:   Sat Nov 21 13:33:21 2009 +0100

i965: Fix several memory leaks on exit.

Bug #25194.

---

 src/mesa/drivers/dri/i965/brw_state.h        |    1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |    2 +-
 src/mesa/drivers/dri/i965/brw_vtbl.c         |   12 +++++++++---
 src/mesa/drivers/dri/i965/brw_wm.c           |    1 -
 4 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index ab6f158..b129b1f 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -112,6 +112,7 @@ void brw_validate_state(struct brw_context *brw);
 void brw_upload_state(struct brw_context *brw);
 void brw_init_state(struct brw_context *brw);
 void brw_destroy_state(struct brw_context *brw);
+void brw_clear_validated_bos(struct brw_context *brw);
 
 /***********************************************************************
  * brw_state_cache.c
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
index f4283bd..af8dfb4 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -143,7 +143,7 @@ static void xor_states( struct brw_state_flags *result,
    result->cache = a->cache ^ b->cache;
 }
 
-static void
+void
 brw_clear_validated_bos(struct brw_context *brw)
 {
    int i;
diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c
index 114e6bd..34aaea3 100644
--- a/src/mesa/drivers/dri/i965/brw_vtbl.c
+++ b/src/mesa/drivers/dri/i965/brw_vtbl.c
@@ -46,7 +46,7 @@
 #include "brw_state.h"
 #include "brw_fallback.h"
 #include "brw_vs.h"
-
+#include "brw_wm.h"
 
 static void
 dri_bo_release(dri_bo **bo)
@@ -66,8 +66,14 @@ static void brw_destroy_context( struct intel_context *intel )
 
    brw_destroy_state(brw);
    brw_draw_destroy( brw );
-
-   _mesa_free(brw->wm.compile_data);
+   brw_clear_validated_bos(brw);
+   if (brw->wm.compile_data) {
+      _mesa_free(brw->wm.compile_data->instruction);
+      _mesa_free(brw->wm.compile_data->vreg);
+      _mesa_free(brw->wm.compile_data->refs);
+      _mesa_free(brw->wm.compile_data->prog_instructions);
+      _mesa_free(brw->wm.compile_data);
+   }
 
    for (i = 0; i < brw->state.nr_color_regions; i++)
       intel_region_release(&brw->state.color_regions[i]);
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index 77e3b2c..6895f64 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -157,7 +157,6 @@ static void do_wm_prog( struct brw_context *brw,
 					  sizeof(*c->prog_instructions));
       c->vreg = _mesa_calloc(BRW_WM_MAX_VREG * sizeof(*c->vreg));
       c->refs = _mesa_calloc(BRW_WM_MAX_REF * sizeof(*c->refs));
-      c->vreg = _mesa_calloc(BRW_WM_MAX_VREG * sizeof(*c->vreg));
    } else {
       void *instruction = c->instruction;
       void *prog_instructions = c->prog_instructions;




More information about the mesa-commit mailing list