From: Clemens Ladisch Date: Sun, 4 Sep 2011 20:14:54 +0000 (+0200) Subject: ALSA: dice: clear device lock when closing hwdep device X-Git-Tag: v3.13-rc1~122^2~87^2~21 X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=9dd81e3143b57d1bf7e8377ab29b86090baa55a8;p=~andy%2Flinux ALSA: dice: clear device lock when closing hwdep device Ensure that misbehaving or aborted userspace programs do not accidentally keep the lock. Signed-off-by: Clemens Ladisch --- diff --git a/sound/firewire/dice.c b/sound/firewire/dice.c index 7225878a09c..ef04089bde7 100644 --- a/sound/firewire/dice.c +++ b/sound/firewire/dice.c @@ -966,6 +966,18 @@ static int dice_hwdep_unlock(struct dice *dice) return err; } +static int dice_hwdep_release(struct snd_hwdep *hwdep, struct file *file) +{ + struct dice *dice = hwdep->private_data; + + spin_lock_irq(&dice->lock); + if (dice->dev_lock_count == -1) + dice->dev_lock_count = 0; + spin_unlock_irq(&dice->lock); + + return 0; +} + static int dice_hwdep_ioctl(struct snd_hwdep *hwdep, struct file *file, unsigned int cmd, unsigned long arg) { @@ -998,6 +1010,7 @@ static int dice_create_hwdep(struct dice *dice) { static const struct snd_hwdep_ops ops = { .read = dice_hwdep_read, + .release = dice_hwdep_release, .poll = dice_hwdep_poll, .ioctl = dice_hwdep_ioctl, .ioctl_compat = dice_hwdep_compat_ioctl,