Messages in this thread | | | From | Tvrtko Ursulin <> | Subject | Re: Ooops when working with USB MIDI (2.6.33.1) | Date | Fri, 9 Apr 2010 07:51:35 +0100 |
| |
On Thursday 08 Apr 2010 13:22:36 Takashi Iwai wrote: > > Takashi, do you remember what the original problem was? > > Well, I have only a vague memory -- it's a similar scenario that some app > still accessing after disconnection. The URB can't be handled after > the disconnection is finished. > > I think the patch below might fix in this case. You can try it > instead of reverting the commit above. > > > thanks, > > Takashi > > --- > diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c > index 2c59afd..81c8d85 100644 > --- a/sound/usb/usbmidi.c > +++ b/sound/usb/usbmidi.c > @@ -986,6 +986,8 @@ static void snd_usbmidi_output_drain(struct > snd_rawmidi_substream *substream) DEFINE_WAIT(wait); > long timeout = msecs_to_jiffies(50); > > + if (ep->umidi->disconnected) > + return; > /* > * The substream buffer is empty, but some data might still be in the > * currently active URBs, so we have to wait for those to complete. > @@ -1275,6 +1277,11 @@ void snd_usbmidi_disconnect(struct list_head* p) > snd_usbmidi_in_endpoint_delete(ep->in); > ep->in = NULL; > } > + ep->active_urbs = 0; > + if (ep->drain_urbs) { > + ep->drain_urbs = 0; > + wake_up(&ep->drain_wait); > + } > } > del_timer_sync(&umidi->error_timer); > }
For the second hunk, do you think ep->out->... and so on? That would be more in-line with code present in 2.6.33.
Tvrtko
| |