diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2011-05-11 04:53:12 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-05-11 08:53:08 -0400 |
commit | aee70400184b6a8d39243b02c244aed61259a46b (patch) | |
tree | 64c38230831c5ec11b07a03467baa25eb4cf9cd5 /sound/firewire/isight.c | |
parent | ac34dad26e6786257ef54d8df4f883825bea02eb (diff) |
ALSA: isight: fix hang when unplugging a running device
When aborting a PCM stream, the xrun is signaled only if the stream is
running. When disconnecting a PCM stream, calling snd_card_disconnect()
too early would change the stream into a non-running state and thus
prevent the xrun from being noticed by user space.
To prevent this, move the snd_card_disconnect() call after the xrun.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/isight.c')
-rw-r--r-- | sound/firewire/isight.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sound/firewire/isight.c b/sound/firewire/isight.c index 4d2edcfdbbca..96267437d373 100644 --- a/sound/firewire/isight.c +++ b/sound/firewire/isight.c | |||
@@ -692,10 +692,9 @@ static int isight_remove(struct device *dev) | |||
692 | { | 692 | { |
693 | struct isight *isight = dev_get_drvdata(dev); | 693 | struct isight *isight = dev_get_drvdata(dev); |
694 | 694 | ||
695 | snd_card_disconnect(isight->card); | ||
696 | |||
697 | mutex_lock(&isight->mutex); | 695 | mutex_lock(&isight->mutex); |
698 | isight_pcm_abort(isight); | 696 | isight_pcm_abort(isight); |
697 | snd_card_disconnect(isight->card); | ||
699 | isight_stop_streaming(isight); | 698 | isight_stop_streaming(isight); |
700 | mutex_unlock(&isight->mutex); | 699 | mutex_unlock(&isight->mutex); |
701 | 700 | ||