From 7f7455b1be68d2ff5706ccf85eff1a96f7c43d34 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 12 Jan 2010 23:03:04 +0100 Subject: once: make once related variables volatile --- src/pulsecore/flist.h | 2 +- src/pulsecore/once.c | 3 +-- src/pulsecore/thread-posix.c | 8 ++------ 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 e147486e..184e5992 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 05a3ad2c..4e509e0c 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 fdab270f..bc0d6e33 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 25eace63..60c1267b 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 \ -- cgit