On Tue, 14 Mar 2006, Oliver Neukum wrote:

> Am Dienstag, 14. März 2006 22:24 schrieb Alan Stern:
> > On Tue, 14 Mar 2006, Alan Stern wrote:
> > 
> > > > > acm_tty_close tty=cd254af8 filp=ce96511c acm=ce24eca0
> > > > > acm_tty_close acm->used=1 acm->dev=00000000
> > > > atm_tty_close called from tty_io.c:release_dev()
> > > > acm->used=1 on entry, decrements to zero == final close
> > > > acm->dev is NULL (unplugged) so call tty_unregister_device()
> > > 
> > > The disconnect routine shouldn't need to set acm->dev to NULL.  The fact
> > > that the first disconnect has already occurred can be detected by the fact
> > > that acm = usb_get_intfdata(intf) will itself be NULL.
> > > 
> > > Will everything work if you simply delete the line
> > > 
> > >   acm->dev = NULL;
> > > 
> > > from acm_disconnect()?
> > 
> > After looking at the code, I see that it won't.  The acm_tty_close() 
> > routine uses acm->dev to tell whether or not the USB device has been 
> > disconnected.  The problem is that when acm->dev is NULL, it calls 
> > acm_tty_unregister() which requires acm->dev to be non-NULL.
> 
> Maybe I am dense, but what is acm->dev used for in acm_tty_unregister()?

It isn't.  I was wrong.  Sorry.

What Paul needs to track is the refcount for acm->dev.  It should be 
incremented and decremented appropriately -- which means that acm->dev had 
better not be NULL when acm_tty_unregister runs.

Alan Stern



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to