diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pulsemixerctrl.c | 21 |
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); |