From e3e99be1316df8175e6caa5524c36436487aecab Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 29 Jun 2011 11:09:49 -0700 Subject: [PATCH] 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 (cherry picked from commit 036b74a7f8adc745c7af089129f070b8e5b8f4bd) (cherry picked from commit d8f65c07e9f3a5948c8bee95482bcab651b33c01) --- src/mesa/drivers/dri/intel/intel_regions.c | 13 ++++++++----- 1 file 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 a4da1ce4fa5..4c4945c7941 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; } }