pulseaudio/pulseaudio-ticket738-mark-shared-vars-as-volatile.patch
Scott Reeves 47b45bb6e5 Accepting request 29478 from home:sreeves1:branches:multimedia:libs
Copy from home:sreeves1:branches:multimedia:libs/pulseaudio via accept of submit request 29478 revision 4.
Request was accepted with message:

OBS-URL: https://build.opensuse.org/request/show/29478
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/pulseaudio?expand=0&rev=36
2010-01-13 20:53:54 +00:00

51 lines
1.6 KiB
Diff

commit 978d33b609969c3b9bbbd759e0f11aaf856c80cf
Author: Arun Raghavan <arun.raghavan@collabora.co.uk>
Date: Sun Dec 6 12:20:53 2009 +0530
Mark shared variables as volatile
'n_waiting' and 'n_waiting_for_accept' may be accessed from mulitple
threads, and thus need to be marked as volatile to suppres certain
compiler optimisations. All uses are protected by a mutex, so we don't
need to worry about cache issues (added documentation for this as well).
This addresses bug #738.
diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c
index a2b98ce..14ed926 100644
--- a/src/pulse/thread-mainloop.c
+++ b/src/pulse/thread-mainloop.c
@@ -51,7 +51,7 @@
struct pa_threaded_mainloop {
pa_mainloop *real_mainloop;
- int n_waiting, n_waiting_for_accept;
+ volatile int n_waiting, n_waiting_for_accept;
pa_thread* thread;
pa_mutex* mutex;
@@ -185,6 +185,7 @@ void pa_threaded_mainloop_unlock(pa_threaded_mainloop *m) {
pa_mutex_unlock(m->mutex);
}
+/* Called with the lock taken */
void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) {
pa_assert(m);
@@ -198,6 +199,7 @@ void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) {
}
}
+/* Called with the lock taken */
void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) {
pa_assert(m);
@@ -212,6 +214,7 @@ void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) {
m->n_waiting --;
}
+/* Called with the lock taken */
void pa_threaded_mainloop_accept(pa_threaded_mainloop *m) {
pa_assert(m);