---
 src/gallium/drivers/radeon/r600_pipe_common.c | 13 +++++++------
 src/gallium/drivers/radeon/r600_pipe_common.h |  3 ++-
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c 
b/src/gallium/drivers/radeon/r600_pipe_common.c
index 95a6a486a3..0ae0cd38a0 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -1093,15 +1093,16 @@ static void r600_fence_reference(struct pipe_screen 
*screen,
                                 struct pipe_fence_handle *src)
 {
        struct radeon_winsys *ws = ((struct r600_common_screen*)screen)->ws;
-       struct r600_multi_fence **rdst = (struct r600_multi_fence **)dst;
+       struct r600_multi_fence *rdst = (struct r600_multi_fence *)(dst ? *dst 
: NULL);
        struct r600_multi_fence *rsrc = (struct r600_multi_fence *)src;
 
-       if (pipe_reference(&(*rdst)->reference, &rsrc->reference)) {
-               ws->fence_reference(&(*rdst)->gfx, NULL);
-               ws->fence_reference(&(*rdst)->sdma, NULL);
-               FREE(*rdst);
+       if (pipe_reference(rdst ? &rdst->reference : NULL,
+                       rsrc ? &rsrc->reference : NULL)) {
+               ws->fence_reference(&rdst->gfx, NULL);
+               ws->fence_reference(&rdst->sdma, NULL);
+               FREE(rdst);
        }
-        *rdst = rsrc;
+       if (dst) *dst = src;
 }
 
 static boolean r600_fence_finish(struct pipe_screen *screen,
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h 
b/src/gallium/drivers/radeon/r600_pipe_common.h
index 6eff9aaf09..e3f9b07c2d 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -887,7 +887,8 @@ r600_resource_reference(struct r600_resource **ptr, struct 
r600_resource *res)
 static inline void
 r600_texture_reference(struct r600_texture **ptr, struct r600_texture *res)
 {
-       pipe_resource_reference((struct pipe_resource **)ptr, 
&res->resource.b.b);
+       pipe_resource_reference((struct pipe_resource **)ptr, 
+                               res ? &res->resource.b.b : NULL);
 }
 
 static inline void
-- 
2.11.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to