|
@@ -559,9 +559,11 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
|
|
|
return;
|
|
|
|
|
|
card = chip->card;
|
|
|
- mutex_lock(®ister_mutex);
|
|
|
down_write(&chip->shutdown_rwsem);
|
|
|
chip->shutdown = 1;
|
|
|
+ up_write(&chip->shutdown_rwsem);
|
|
|
+
|
|
|
+ mutex_lock(®ister_mutex);
|
|
|
chip->num_interfaces--;
|
|
|
if (chip->num_interfaces <= 0) {
|
|
|
snd_card_disconnect(card);
|
|
@@ -582,11 +584,9 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
|
|
|
snd_usb_mixer_disconnect(p);
|
|
|
}
|
|
|
usb_chip[chip->index] = NULL;
|
|
|
- up_write(&chip->shutdown_rwsem);
|
|
|
mutex_unlock(®ister_mutex);
|
|
|
snd_card_free_when_closed(card);
|
|
|
} else {
|
|
|
- up_write(&chip->shutdown_rwsem);
|
|
|
mutex_unlock(®ister_mutex);
|
|
|
}
|
|
|
}
|