Module: Mesa
Branch: master
Commit: 8ff16111eee309652b5409890c42d042e33770e2
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ff16111eee309652b5409890c42d042e33770e2

Author: Chia-I Wu <olva...@gmail.com>
Date:   Tue Jul  8 14:03:17 2014 +0800

ilo: fix fence reference counting

The old code was complicated, and was wrong when *ptr is NULL.

---

 src/gallium/drivers/ilo/ilo_screen.c |   21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/ilo/ilo_screen.c 
b/src/gallium/drivers/ilo/ilo_screen.c
index a7eaa1b..4e4739c 100644
--- a/src/gallium/drivers/ilo/ilo_screen.c
+++ b/src/gallium/drivers/ilo/ilo_screen.c
@@ -529,26 +529,23 @@ ilo_fence_reference(struct pipe_screen *screen,
                     struct pipe_fence_handle **p,
                     struct pipe_fence_handle *f)
 {
-   struct ilo_fence **ptr = (struct ilo_fence **) p;
    struct ilo_fence *fence = ilo_fence(f);
+   struct ilo_fence *old;
 
-   if (!ptr) {
-      /* still need to reference fence */
-      if (fence)
-         pipe_reference(NULL, &fence->reference);
-      return;
+   if (likely(p)) {
+      old = ilo_fence(*p);
+      *p = f;
+   }
+   else {
+      old = NULL;
    }
 
-   /* reference fence and dereference the one pointed to by ptr */
-   if (*ptr && pipe_reference(&(*ptr)->reference, &fence->reference)) {
-      struct ilo_fence *old = *ptr;
-
+   STATIC_ASSERT(&((struct ilo_fence *) NULL)->reference == NULL);
+   if (pipe_reference(&old->reference, &fence->reference)) {
       if (old->bo)
          intel_bo_unreference(old->bo);
       FREE(old);
    }
-
-   *ptr = fence;
 }
 
 static boolean

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to