From 013eda17e91ff421cd1ef70470e3575f1183fcbd Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 23 Dec 2011 10:40:58 +0000 Subject: [PATCH] sna: Free the additional bindings on proxies --- src/sna/kgem.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 53f100ca..b74777ce 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -697,20 +697,25 @@ static void kgem_fixup_self_relocs(struct kgem *kgem, struct kgem_bo *bo) } } -static void kgem_bo_free(struct kgem *kgem, struct kgem_bo *bo) +static void kgem_bo_binding_free(struct kgem *kgem, struct kgem_bo *bo) { struct kgem_bo_binding *b; - DBG(("%s: handle=%d\n", __FUNCTION__, bo->handle)); - assert(bo->refcnt == 0); - assert(bo->exec == NULL); - b = bo->binding.next; while (b) { struct kgem_bo_binding *next = b->next; free (b); b = next; } +} + +static void kgem_bo_free(struct kgem *kgem, struct kgem_bo *bo) +{ + DBG(("%s: handle=%d\n", __FUNCTION__, bo->handle)); + assert(bo->refcnt == 0); + assert(bo->exec == NULL); + + kgem_bo_binding_free(kgem, bo); if (bo->map) { DBG(("%s: releasing %s vma for handle=%d, count=%d\n", @@ -1991,10 +1996,9 @@ skip_active_search: void _kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo) { if (bo->proxy) { - kgem_bo_unref(kgem, bo->proxy); - - assert(bo->binding.next == NULL); assert(bo->map == NULL); + kgem_bo_unref(kgem, bo->proxy); + kgem_bo_binding_free(kgem, bo); _list_del(&bo->request); free(bo); return;