diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-01-12 23:03:04 +0100 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2014-04-02 14:22:30 +0200 |
commit | 63f54e8f2bcfa20eabe8193bc53997ac8268591f (patch) | |
tree | 48e206cd2cf7dbed779d6a4cc77d55d73261305d | |
parent | f73d4a9f9f11a357d8edeb3d4615d61e4bb49422 (diff) |
once: make once related variables volatile
-rw-r--r-- | src/pulsecore/flist.h | 2 | ||||
-rw-r--r-- | src/pulsecore/once.c | 3 | ||||
-rw-r--r-- | src/pulsecore/thread-posix.c | 8 | ||||
-rw-r--r-- | src/pulsecore/thread.h | 2 |
4 files changed, 5 insertions, 10 deletions
diff --git a/src/pulsecore/flist.h b/src/pulsecore/flist.h index e147486e1..184e5992d 100644 --- a/src/pulsecore/flist.h +++ b/src/pulsecore/flist.h @@ -45,7 +45,7 @@ void* pa_flist_pop(pa_flist*l); #define PA_STATIC_FLIST_DECLARE(name, size, free_cb) \ static struct { \ - pa_flist *flist; \ + pa_flist *volatile flist; \ pa_once once; \ } name##_flist = { NULL, PA_ONCE_INIT }; \ static void name##_flist_init(void) { \ diff --git a/src/pulsecore/once.c b/src/pulsecore/once.c index 05a3ad2c8..4e509e0cc 100644 --- a/src/pulsecore/once.c +++ b/src/pulsecore/once.c @@ -29,8 +29,6 @@ #include "once.h" pa_bool_t pa_once_begin(pa_once *control) { - pa_mutex *m; - pa_assert(control); if (pa_atomic_load(&control->done)) @@ -43,6 +41,7 @@ pa_bool_t pa_once_begin(pa_once *control) { * executed by us. Hence the awkward locking. */ for (;;) { + pa_mutex *m; if ((m = pa_atomic_ptr_load(&control->mutex))) { diff --git a/src/pulsecore/thread-posix.c b/src/pulsecore/thread-posix.c index fdab270f0..bc0d6e334 100644 --- a/src/pulsecore/thread-posix.c +++ b/src/pulsecore/thread-posix.c @@ -80,11 +80,9 @@ pa_thread* pa_thread_new(pa_thread_func_t thread_func, void *userdata) { pa_assert(thread_func); - t = pa_xnew(pa_thread, 1); + t = pa_xnew0(pa_thread, 1); t->thread_func = thread_func; t->userdata = userdata; - t->joined = FALSE; - pa_atomic_store(&t->running, 0); if (pthread_create(&t->id, NULL, internal_thread_func, t) < 0) { pa_xfree(t); @@ -135,10 +133,8 @@ pa_thread* pa_thread_self(void) { /* This is a foreign thread, let's create a pthread structure to * make sure that we can always return a sensible pointer */ - t = pa_xnew(pa_thread, 1); + t = pa_xnew0(pa_thread, 1); t->id = pthread_self(); - t->thread_func = NULL; - t->userdata = NULL; t->joined = TRUE; pa_atomic_store(&t->running, 2); diff --git a/src/pulsecore/thread.h b/src/pulsecore/thread.h index 25eace63b..60c1267b5 100644 --- a/src/pulsecore/thread.h +++ b/src/pulsecore/thread.h @@ -55,7 +55,7 @@ void *pa_tls_set(pa_tls *t, void *userdata); #define PA_STATIC_TLS_DECLARE(name, free_cb) \ static struct { \ pa_once once; \ - pa_tls *tls; \ + pa_tls *volatile tls; \ } name##_tls = { \ .once = PA_ONCE_INIT, \ .tls = NULL \ |