diff options
| author | Takashi Iwai <tiwai@suse.de> | 2008-10-02 08:50:22 -0400 |
|---|---|---|
| committer | Jaroslav Kysela <perex@perex.cz> | 2008-10-10 07:41:48 -0400 |
| commit | 7a17daae8ed71bf3259d905a4fc48a5b424fa935 (patch) | |
| tree | 98c6208065121b01b2332a181c3c17acc1cca547 | |
| parent | 669faba27f2f7b04b9228d20e30e7f584f0becd5 (diff) | |
ALSA: usb - Fix possible Oops at USB-MIDI disconnection
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>
| -rw-r--r-- | sound/usb/usbmidi.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c index c0c7770198a..5962e4b8442 100644 --- a/sound/usb/usbmidi.c +++ b/sound/usb/usbmidi.c | |||
| @@ -1112,6 +1112,15 @@ void snd_usbmidi_disconnect(struct list_head* p) | |||
| 1112 | } | 1112 | } |
| 1113 | if (ep->in) | 1113 | if (ep->in) |
| 1114 | usb_kill_urb(ep->in->urb); | 1114 | usb_kill_urb(ep->in->urb); |
| 1115 | /* free endpoints here; later call can result in Oops */ | ||
| 1116 | if (ep->out) { | ||
| 1117 | snd_usbmidi_out_endpoint_delete(ep->out); | ||
| 1118 | ep->out = NULL; | ||
| 1119 | } | ||
| 1120 | if (ep->in) { | ||
| 1121 | snd_usbmidi_in_endpoint_delete(ep->in); | ||
| 1122 | ep->in = NULL; | ||
| 1123 | } | ||
| 1115 | } | 1124 | } |
| 1116 | del_timer_sync(&umidi->error_timer); | 1125 | del_timer_sync(&umidi->error_timer); |
| 1117 | } | 1126 | } |
