]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/once.h
Merge HUGE set of changes temporarily into a branch, to allow me to move them from...
[pulseaudio] / src / pulsecore / once.h
index c20fc0b4c8836d9faf7e4cf2aa9e188997f05f28..b2602121c96dfefd5f28f9934e275c362a3ce932 100644 (file)
 ***/
 
 #include <pulsecore/mutex.h>
+#include <pulsecore/atomic.h>
 
 typedef struct pa_once {
-    unsigned int once_value;
-    pa_mutex *mutex;
+    pa_atomic_ptr_t mutex;
+    pa_atomic_t ref, done;
 } pa_once_t;
 
-#define PA_ONCE_INIT { .once_value = 0, .mutex = NULL }
+#define PA_ONCE_INIT                                                    \
+    {                                                                   \
+        .mutex = PA_ATOMIC_PTR_INIT(NULL),                              \
+        .ref = PA_ATOMIC_INIT(0),                                   \
+        .done = PA_ATOMIC_INIT(0)                                   \
+    }
 
 typedef void (*pa_once_func_t) (void);