From: Dave Airlie Date: Thu, 22 Jan 2009 11:19:56 +0000 (+1000) Subject: radeon: cleanup bo unref codepath in pending code X-Git-Tag: 062012170305~17748 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a5b54eb3c99aedf92197c834a6645127a231b382;p=profile%2Fivi%2Fmesa.git radeon: cleanup bo unref codepath in pending code assert for bad case hopefully --- diff --git a/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c b/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c index c4026be..353f001 100644 --- a/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c +++ b/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c @@ -190,10 +190,14 @@ static int legacy_is_pending(struct radeon_bo *bo) if (bo_legacy->pnext) { bo_legacy->pnext->pprev = bo_legacy->pprev; } + assert(bo_legacy->is_pending <= bo->cref); while (bo_legacy->is_pending--) { - radeon_bo_unref(bo); + bo = radeon_bo_unref(bo); + if (!bo) + break; } - bo_legacy->is_pending = 0; + if (bo) + bo_legacy->is_pending = 0; boml->cpendings--; return 0; } @@ -580,7 +584,7 @@ void radeon_bo_legacy_pending(struct radeon_bo *bo, uint32_t pending) struct bo_legacy *bo_legacy = (struct bo_legacy*)bo; bo_legacy->pending = pending; - bo_legacy->is_pending += 1; + bo_legacy->is_pending++; /* add to pending list */ radeon_bo_ref(bo); if (bo_legacy->is_pending > 1) {