|
@@ -307,6 +307,11 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
|
|
|
|
|
|
static int snd_usb_audio_free(struct snd_usb_audio *chip)
|
|
|
{
|
|
|
+ struct list_head *p, *n;
|
|
|
+
|
|
|
+ list_for_each_safe(p, n, &chip->ep_list)
|
|
|
+ snd_usb_endpoint_free(p);
|
|
|
+
|
|
|
mutex_destroy(&chip->mutex);
|
|
|
kfree(chip);
|
|
|
return 0;
|
|
@@ -585,7 +590,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
|
|
|
struct snd_usb_audio *chip)
|
|
|
{
|
|
|
struct snd_card *card;
|
|
|
- struct list_head *p, *n;
|
|
|
+ struct list_head *p;
|
|
|
|
|
|
if (chip == (void *)-1L)
|
|
|
return;
|
|
@@ -598,14 +603,16 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
|
|
|
mutex_lock(®ister_mutex);
|
|
|
chip->num_interfaces--;
|
|
|
if (chip->num_interfaces <= 0) {
|
|
|
+ struct snd_usb_endpoint *ep;
|
|
|
+
|
|
|
snd_card_disconnect(card);
|
|
|
/* release the pcm resources */
|
|
|
list_for_each(p, &chip->pcm_list) {
|
|
|
snd_usb_stream_disconnect(p);
|
|
|
}
|
|
|
/* release the endpoint resources */
|
|
|
- list_for_each_safe(p, n, &chip->ep_list) {
|
|
|
- snd_usb_endpoint_free(p);
|
|
|
+ list_for_each_entry(ep, &chip->ep_list, list) {
|
|
|
+ snd_usb_endpoint_release(ep);
|
|
|
}
|
|
|
/* release the midi resources */
|
|
|
list_for_each(p, &chip->midi_list) {
|