summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2011-06-29 11:09:49 -0700
committerEric Anholt <eric@anholt.net>2011-07-07 14:05:20 -0700
commit036b74a7f8adc745c7af089129f070b8e5b8f4bd (patch)
tree356d480a5db0a373ab48425443f0cd08f6f46d1b
parent86e62b2357447b7c97f434be4834f4b50aa0764d (diff)
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@chad-versace.us>
-rw-r--r--src/mesa/drivers/dri/intel/intel_regions.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c
index a4da1ce4fa5..6cf37c4c40c 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.c
+++ b/src/mesa/drivers/dri/intel/intel_regions.c
@@ -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;
}