From cf25ef9072f5290d228a381727c4ff921b0c60d6 Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Fri, 13 Mar 2009 15:47:18 +0100 Subject: gallium: Use struct pipe_atomic for pipe refcounts. Signed-off-by: Thomas Hellstrom --- src/gallium/include/pipe/p_refcnt.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/gallium/include') diff --git a/src/gallium/include/pipe/p_refcnt.h b/src/gallium/include/pipe/p_refcnt.h index 27b4e8fbfe..60844e40a5 100644 --- a/src/gallium/include/pipe/p_refcnt.h +++ b/src/gallium/include/pipe/p_refcnt.h @@ -30,6 +30,7 @@ #include "p_defines.h" +#include "p_atomic.h" #ifdef __cplusplus @@ -39,14 +40,14 @@ extern "C" { struct pipe_reference { - unsigned count; + struct pipe_atomic count; }; static INLINE void pipe_reference_init(struct pipe_reference *reference, unsigned count) { - reference->count = count; + p_atomic_set(&reference->count, count); } @@ -64,13 +65,13 @@ pipe_reference(struct pipe_reference **ptr, struct pipe_reference *reference) /* bump the reference.count first */ if (reference) { - assert(reference->count); - reference->count++; + assert(p_atomic_read(&reference->count) != 0); + p_atomic_inc(&reference->count); } if (*ptr) { - assert((*ptr)->count); - if (--(*ptr)->count == 0) { + assert(p_atomic_read(&(*ptr)->count) != 0); + if (p_atomic_dec_zero(&(*ptr)->count)) { destroy = TRUE; } } -- cgit v1.2.3