aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/include/pipe/p_refcnt.h
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom-at-vmware-dot-com>2009-03-13 15:47:18 +0100
committerThomas Hellstrom <thellstrom-at-vmware-dot-com>2009-03-16 11:40:47 +0100
commitcf25ef9072f5290d228a381727c4ff921b0c60d6 (patch)
tree6e8be9bcf952d395920d742ac3468896c52ffed8 /src/gallium/include/pipe/p_refcnt.h
parentfc1ef97c3349588cd33a22dc88ab30b6f701000e (diff)
gallium: Use struct pipe_atomic for pipe refcounts.
Signed-off-by: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
Diffstat (limited to 'src/gallium/include/pipe/p_refcnt.h')
-rw-r--r--src/gallium/include/pipe/p_refcnt.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/gallium/include/pipe/p_refcnt.h b/src/gallium/include/pipe/p_refcnt.h
index 27b4e8fbfed..60844e40a57 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;
}
}