| From d8009882e9f5e1a76986c741f071edd2ad760c97 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Sun, 7 Sep 2008 12:51:13 +0200 |
| Subject: ALSA: use correct lock in snd_ctl_dev_disconnect() |
| Message-ID: <20081031164425.GA10625@puku.stupidest.org> |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit d8009882e9f5e1a76986c741f071edd2ad760c97 upstream |
| |
| The lock used in snd_ctl_dev_disconnect() should be card->ctl_files_rwlock |
| for protection of card->ctl_files entries, instead of card->controls_rwsem. |
| |
| Reported-by: Vegard Nossum <vegard.nossum@gmail.com> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Jaroslav Kysela <perex@perex.cz> |
| Cc: Chris Wedgwood <cw@f00f.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| sound/core/control.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/sound/core/control.c |
| +++ b/sound/core/control.c |
| @@ -1427,12 +1427,12 @@ static int snd_ctl_dev_disconnect(struct |
| cardnum = card->number; |
| snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO); |
| |
| - down_read(&card->controls_rwsem); |
| + read_lock(&card->ctl_files_rwlock); |
| list_for_each_entry(ctl, &card->ctl_files, list) { |
| wake_up(&ctl->change_sleep); |
| kill_fasync(&ctl->fasync, SIGIO, POLL_ERR); |
| } |
| - up_read(&card->controls_rwsem); |
| + read_unlock(&card->ctl_files_rwlock); |
| |
| if ((err = snd_unregister_device(SNDRV_DEVICE_TYPE_CONTROL, |
| card, -1)) < 0) |