From 45e26ca4d8afa5ecb1ed698fa05eb0223aac008e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 23 Sep 2007 23:00:05 +0000 Subject: 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 --- src/pulsemixerctrl.c | 21 +++++++++++++++------ 1 file 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); -- cgit