diff options
author | Takashi Iwai <tiwai@suse.de> | 2008-04-17 12:50:47 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2008-04-24 12:00:39 +0200 |
commit | 73d38b13ffb105ab633bd91969c8d218b2de38d4 (patch) | |
tree | e7bada137d13b41e6859c8397cfaa5b6e837f444 /sound/core/init.c | |
parent | 20861fa7b20a40ca045393df634d4d51e61efa58 (diff) | |
download | op-kernel-dev-73d38b13ffb105ab633bd91969c8d218b2de38d4.zip op-kernel-dev-73d38b13ffb105ab633bd91969c8d218b2de38d4.tar.gz |
[ALSA] Fix the race of card instance unregistration
Move the call of device_unregister() for the card instance in
snd_card_disconnect() to avoid the race of sysfs card entry, which
can be typically found on usb-audio reconnection.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/init.c')
-rw-r--r-- | sound/core/init.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sound/core/init.c b/sound/core/init.c index f045f7d..07acac7 100644 --- a/sound/core/init.c +++ b/sound/core/init.c @@ -360,6 +360,12 @@ int snd_card_disconnect(struct snd_card *card) snd_printk(KERN_ERR "not all devices for card %i can be disconnected\n", card->number); snd_info_card_disconnect(card); +#ifndef CONFIG_SYSFS_DEPRECATED + if (card->card_dev) { + device_unregister(card->card_dev); + card->card_dev = NULL; + } +#endif return 0; } @@ -401,10 +407,6 @@ static int snd_card_do_free(struct snd_card *card) snd_printk(KERN_WARNING "unable to free card info\n"); /* Not fatal error */ } -#ifndef CONFIG_SYSFS_DEPRECATED - if (card->card_dev) - device_unregister(card->card_dev); -#endif kfree(card); return 0; } |