ALSA: usb - Fix possible Oops at USB-MIDI disconnection
authorTakashi Iwai <tiwai@suse.de>
Thu, 2 Oct 2008 12:50:22 +0000 (14:50 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 10 Oct 2008 11:41:48 +0000 (13:41 +0200)
The endpoints should be released immediately at disconnection
rather than the delayed release.  This could be a reason of Oops
at USB-audio device disconnection being used.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
sound/usb/usbmidi.c

index c0c7770198ad69782b234b1c77b722e3e61721ca..5962e4b8442394fbe4812c2bfd21a013cf04f29c 100644 (file)
@@ -1112,6 +1112,15 @@ void snd_usbmidi_disconnect(struct list_head* p)
                }
                if (ep->in)
                        usb_kill_urb(ep->in->urb);
+               /* free endpoints here; later call can result in Oops */
+               if (ep->out) {
+                       snd_usbmidi_out_endpoint_delete(ep->out);
+                       ep->out = NULL;
+               }
+               if (ep->in) {
+                       snd_usbmidi_in_endpoint_delete(ep->in);
+                       ep->in = NULL;
+               }
        }
        del_timer_sync(&umidi->error_timer);
 }