diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2011-05-11 10:53:12 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-05-11 14:53:08 +0200 |
commit | aee70400184b6a8d39243b02c244aed61259a46b (patch) | |
tree | 64c38230831c5ec11b07a03467baa25eb4cf9cd5 /sound/firewire | |
parent | ac34dad26e6786257ef54d8df4f883825bea02eb (diff) | |
download | op-kernel-dev-aee70400184b6a8d39243b02c244aed61259a46b.zip op-kernel-dev-aee70400184b6a8d39243b02c244aed61259a46b.tar.gz |
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')
-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 4d2edcf..9626743 100644 --- a/sound/firewire/isight.c +++ b/sound/firewire/isight.c @@ -692,10 +692,9 @@ static int isight_remove(struct device *dev) { struct isight *isight = dev_get_drvdata(dev); - snd_card_disconnect(isight->card); - mutex_lock(&isight->mutex); isight_pcm_abort(isight); + snd_card_disconnect(isight->card); isight_stop_streaming(isight); mutex_unlock(&isight->mutex); |