intel: Release fb backing regions in intelDestroyBuffer()
authorShuang He <shuang.he@intel.com>
Mon, 15 Jun 2009 22:19:30 +0000 (16:19 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 15 Jun 2009 22:19:30 +0000 (16:19 -0600)
Fixes memory leak when destroying framebuffers.

src/mesa/drivers/dri/intel/intel_screen.c

index 65e62947ef6abe1eaf8f93348b30a670e9c639c2..50cb13a48223f3ad034733dbd79c924b9bee461d 100644 (file)
@@ -395,6 +395,30 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
 static void
 intelDestroyBuffer(__DRIdrawablePrivate * driDrawPriv)
 {
+   struct intel_framebuffer *intel_fb = driDrawPriv->driverPrivate;
+   struct intel_renderbuffer *depth_rb;
+   struct intel_renderbuffer *stencil_rb;
+
+   if (intel_fb) {
+      if (intel_fb->color_rb[0]) {
+         intel_renderbuffer_set_region(intel_fb->color_rb[0], NULL);
+      }
+
+      if (intel_fb->color_rb[1]) {
+         intel_renderbuffer_set_region(intel_fb->color_rb[1], NULL);
+      }
+
+      depth_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_DEPTH);
+      if (depth_rb) {
+         intel_renderbuffer_set_region(depth_rb, NULL);
+      }
+
+      stencil_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_STENCIL);
+      if (stencil_rb) {
+         intel_renderbuffer_set_region(stencil_rb, NULL);
+      }
+   }
+
    _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
 }