From f8624a7876444ebb5587c1f1bc821ab5c3a2b639 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Mon, 12 Sep 2011 12:57:20 +0200 Subject: sink,source: Avoid crash by not updating volume on shutdown Sometimes the ALSA mixer can be modified during a point at shutdown which causes a race condition trying to update the volume of an unlinked sink. Includes typo fix by our Chief Typo Spotter, Colin, and a clarifying comment by me. BugLink: http://bugs.launchpad.net/bugs/841968 Signed-off-by: David Henningsson --- src/modules/alsa/alsa-sink.c | 3 +++ src/modules/alsa/alsa-source.c | 3 +++ 2 files changed, 6 insertions(+) (limited to 'src/modules') diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c index d164128b4..5b8dd3154 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -1212,6 +1212,9 @@ static int ctl_mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) { if (mask == SND_CTL_EVENT_MASK_REMOVE) return 0; + if (!PA_SINK_IS_LINKED(u->sink->state)) + return 0; + if (u->sink->suspend_cause & PA_SUSPEND_SESSION) return 0; diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c index 229edf12a..4b3c8b7a7 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -1063,6 +1063,9 @@ static int ctl_mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) { if (mask == SND_CTL_EVENT_MASK_REMOVE) return 0; + if (!PA_SOURCE_IS_LINKED(u->source->state)) + return 0; + if (u->source->suspend_cause & PA_SUSPEND_SESSION) return 0; -- cgit v1.2.3