summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-09-23 23:00:05 +0000
committerLennart Poettering <lennart@poettering.net>2007-09-23 23:00:05 +0000
commit45e26ca4d8afa5ecb1ed698fa05eb0223aac008e (patch)
treec36b4ddf8b7e923a96ffdb918df3a775a41e5871
parentc7bce9fd5aba9125fb030fb3c61fa6140a743396 (diff)
use atomic ints to circumvent gstreamer threading api issues
git-svn-id: file:///home/lennart/svn/public/gst-pulse/trunk@67 bb39ca4e-bce3-0310-b5d4-eea78a553289
-rw-r--r--src/pulsemixerctrl.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/pulsemixerctrl.c b/src/pulsemixerctrl.c
index df29a48..c3941dd 100644
--- a/src/pulsemixerctrl.c
+++ b/src/pulsemixerctrl.c
@@ -87,8 +87,11 @@ static void gst_pulsemixer_ctrl_sink_info_cb(pa_context *context, const pa_sink_
c->muted = i->mute;
c->type = GST_PULSEMIXER_SINK;
- if (c->track)
- c->track->flags = (c->track->flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ if (c->track) {
+ int i = g_atomic_int_get(&c->track->flags);
+ i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ g_atomic_int_set(&c->track->flags, i);
+ }
c->operation_success = 1;
pa_threaded_mainloop_signal(c->mainloop, 0);
@@ -129,8 +132,11 @@ static void gst_pulsemixer_ctrl_source_info_cb(pa_context *context, const pa_sou
c->muted = i->mute;
c->type = GST_PULSEMIXER_SOURCE;
- if (c->track)
- c->track->flags = (c->track->flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ if (c->track) {
+ int i = g_atomic_int_get(&c->track->flags);
+ i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ g_atomic_int_set(&c->track->flags, i);
+ }
c->operation_success = 1;
pa_threaded_mainloop_signal(c->mainloop, 0);
@@ -483,8 +489,11 @@ void gst_pulsemixer_ctrl_set_mute(GstPulseMixerCtrl *c, GstMixerTrack *track, gb
c->muted = !!mute;
c->update_mute = TRUE;
- if (c->track)
- c->track->flags = (c->track->flags & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ if (c->track) {
+ int i = g_atomic_int_get(&c->track->flags);
+ i = (i & ~GST_MIXER_TRACK_MUTE) | (c->muted ? GST_MIXER_TRACK_MUTE : 0);
+ g_atomic_int_set(&c->track->flags, i);
+ }
restart_time_event(c);