X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=sound%2Fusb%2Fcard.c;h=c0f8270bc199e9e91a82cef451d1aa63ead9eb15;hb=382225e62bdb8059b7f915b133426425516dd300;hp=800f7cb4f251cd77ae246c5dee2acaed9de587f4;hpb=306496761745942d8167e9193a738b559a7fb0b3;p=mv-sheeva.git diff --git a/sound/usb/card.c b/sound/usb/card.c index 800f7cb4f25..c0f8270bc19 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -323,6 +323,7 @@ static int snd_usb_audio_create(struct usb_device *dev, int idx, return -ENOMEM; } + mutex_init(&chip->shutdown_mutex); chip->index = idx; chip->dev = dev; chip->card = card; @@ -531,6 +532,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr) chip = ptr; card = chip->card; mutex_lock(®ister_mutex); + mutex_lock(&chip->shutdown_mutex); chip->shutdown = 1; chip->num_interfaces--; if (chip->num_interfaces <= 0) { @@ -548,9 +550,11 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr) snd_usb_mixer_disconnect(p); } usb_chip[chip->index] = NULL; + mutex_unlock(&chip->shutdown_mutex); mutex_unlock(®ister_mutex); snd_card_free_when_closed(card); } else { + mutex_unlock(&chip->shutdown_mutex); mutex_unlock(®ister_mutex); } }