Mesa (7.11): intel: Allow intel_region_reference() with *dst != NULL.

Eric Anholt anholt at kemper.freedesktop.org
Wed Jul 13 20:24:49 UTC 2011


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

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jun 29 11:09:49 2011 -0700

intel: Allow intel_region_reference() with *dst != NULL.

This should help us avoid leaking regions in region reference code by
making the API more predictable.

Reviewed-by: Chad Versace <chad at chad-versace.us>
(cherry picked from commit 036b74a7f8adc745c7af089129f070b8e5b8f4bd)
(cherry picked from commit d8f65c07e9f3a5948c8bee95482bcab651b33c01)

---

 src/mesa/drivers/dri/intel/intel_regions.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c
index a4da1ce..4c4945c 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.c
+++ b/src/mesa/drivers/dri/intel/intel_regions.c
@@ -264,12 +264,15 @@ intel_region_alloc_for_handle(struct intel_screen *screen,
 void
 intel_region_reference(struct intel_region **dst, struct intel_region *src)
 {
-   if (src)
-      _DBG("%s %p %d\n", __FUNCTION__, src, src->refcount);
+   _DBG("%s: %p(%d) -> %p(%d)\n", __FUNCTION__,
+	*dst, *dst ? (*dst)->refcount : 0, src, src ? src->refcount : 0);
 
-   assert(*dst == NULL);
-   if (src) {
-      src->refcount++;
+   if (src != *dst) {
+      if (*dst)
+	 intel_region_release(dst);
+
+      if (src)
+         src->refcount++;
       *dst = src;
    }
 }




More information about the mesa-commit mailing list