[Mesa-dev] [PATCH] mesa: fix-up and use _mesa_delete_renderbuffer()

Brian Paul brianp at vmware.com
Thu Aug 30 08:31:02 PDT 2012


_mesa_delete_renderbuffer() should free the mutex (though that may be a
no-op) and then free the renderbuffer object itself.  Subclasses of
gl_renderbuffer can use this function too.
---
 src/mesa/drivers/dri/intel/intel_fbo.c     |    2 +-
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c |    2 +-
 src/mesa/drivers/dri/radeon/radeon_fbo.c   |    2 +-
 src/mesa/drivers/dri/swrast/swrast.c       |    2 +-
 src/mesa/main/renderbuffer.c               |    6 +++++-
 src/mesa/state_tracker/st_cb_fbo.c         |    2 +-
 src/mesa/swrast/s_renderbuffer.c           |    2 +-
 7 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index ad78e0a..c522b48 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -95,7 +95,7 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb)
 
    intel_miptree_release(&irb->mt);
 
-   free(irb);
+   _mesa_delete_renderbuffer(rb);
 }
 
 /**
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index 50eb182..3be958b 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -107,7 +107,7 @@ nouveau_renderbuffer_del(struct gl_renderbuffer *rb)
 	struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface;
 
 	nouveau_surface_ref(NULL, s);
-	FREE(rb);
+	_mesa_delete_renderbuffer(rb);
 }
 
 static struct gl_renderbuffer *
diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c b/src/mesa/drivers/dri/radeon/radeon_fbo.c
index 9032a32..2267a10 100644
--- a/src/mesa/drivers/dri/radeon/radeon_fbo.c
+++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c
@@ -67,7 +67,7 @@ radeon_delete_renderbuffer(struct gl_renderbuffer *rb)
   if (rrb && rrb->bo) {
     radeon_bo_unref(rrb->bo);
   }
-  free(rrb);
+  _mesa_delete_renderbuffer(rb);
 }
 
 #if defined(RADEON_R100)
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 9aed2f6e..f0ff0b0 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -268,7 +268,7 @@ swrast_delete_renderbuffer(struct gl_renderbuffer *rb)
     TRACE;
 
     free(xrb->Base.Buffer);
-    free(xrb);
+    _mesa_delete_renderbuffer(rb);
 }
 
 /* see bytes_per_line in libGL */
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 1bb09bf..26f53d1 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -75,11 +75,15 @@ _mesa_new_renderbuffer(struct gl_context *ctx, GLuint name)
 /**
  * Delete a gl_framebuffer.
  * This is the default function for renderbuffer->Delete().
+ * Drivers which subclass gl_renderbuffer should probably implement their
+ * own delete function.  But the driver might also call this function to
+ * free the object in the end.
  */
 void
 _mesa_delete_renderbuffer(struct gl_renderbuffer *rb)
 {
-   /* no-op */
+   _glthread_DESTROY_MUTEX(rb->Mutex);
+   free(rb);
 }
 
 
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 40e3677..01aba8e 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -232,7 +232,7 @@ st_renderbuffer_delete(struct gl_renderbuffer *rb)
    pipe_surface_reference(&strb->surface, NULL);
    pipe_resource_reference(&strb->texture, NULL);
    free(strb->data);
-   free(strb);
+   _mesa_delete_renderbuffer(rb);
 }
 
 
diff --git a/src/mesa/swrast/s_renderbuffer.c b/src/mesa/swrast/s_renderbuffer.c
index d8a7467..e468bdb 100644
--- a/src/mesa/swrast/s_renderbuffer.c
+++ b/src/mesa/swrast/s_renderbuffer.c
@@ -174,7 +174,7 @@ soft_renderbuffer_delete(struct gl_renderbuffer *rb)
       free(srb->Buffer);
       srb->Buffer = NULL;
    }
-   free(srb);
+   _mesa_delete_renderbuffer(rb);
 }
 
 
-- 
1.7.3.4



More information about the mesa-dev mailing list