intel: Allow intel_region_reference() with *dst != NULL.
authorEric Anholt <eric@anholt.net>
Wed, 29 Jun 2011 18:09:49 +0000 (11:09 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 7 Jul 2011 21:05:20 +0000 (14:05 -0700)
This should help us avoid leaking regions in region reference code by
making the API more predictable.

Reviewed-by: Chad Versace <chad@chad-versace.us>
src/mesa/drivers/dri/intel/intel_regions.c

index a4da1ce4fa5857ab48a4aa59fb7c886c5134667d..6cf37c4c40c3815b26e16460fb42f6bcdd1af90a 100644 (file)
@@ -264,11 +264,13 @@ 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);
+
+   if (src != *dst) {
+      if (*dst)
+        intel_region_release(dst);
 
-   assert(*dst == NULL);
-   if (src) {
       src->refcount++;
       *dst = src;
    }