]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] USB: corrected digi_acceleport 2.6.9-rc1 fix for hang on disconnect
authorAl Borchers <alborchers@steinerpoint.com>
Tue, 12 Oct 2004 08:01:24 +0000 (01:01 -0700)
committerGreg Kroah-Hartman <greg@kroah.com>
Tue, 12 Oct 2004 08:01:24 +0000 (01:01 -0700)
- Fixed hang on disconnect in digi_acceleport USB serial driver.
  See http://bugme.osdl.org/show_bug.cgi?id=2459.  Close after
  disconnect no longer tries to communicate with the device.

Signed-off-by: Al Borchers <alborchers@steinerpoint.com>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/usb/serial/digi_acceleport.c

index eef146950bb7f12893d7db44d42f18630552fd5b..3ac69f2c2510fe824941a2e90e0408892d1e0ef1 100644 (file)
@@ -1546,13 +1546,17 @@ static void digi_close( struct usb_serial_port *port, struct file *filp )
 dbg( "digi_close: TOP: port=%d, open_count=%d", priv->dp_port_num, port->open_count );
 
 
+       /* if disconnected, just clear flags */
+       if (!usb_get_intfdata(port->serial->interface))
+               goto exit;
+
        /* do cleanup only after final close on this port */
        spin_lock_irqsave( &priv->dp_port_lock, flags );
        priv->dp_in_close = 1;
        spin_unlock_irqrestore( &priv->dp_port_lock, flags );
 
        /* tell line discipline to process only XON/XOFF */
-        tty->closing = 1;
+       tty->closing = 1;
 
        /* wait for output to drain */
        if( (filp->f_flags&(O_NDELAY|O_NONBLOCK)) == 0 ) {
@@ -1616,6 +1620,7 @@ dbg( "digi_close: TOP: port=%d, open_count=%d", priv->dp_port_num, port->open_co
 
        tty->closing = 0;
 
+exit:
        spin_lock_irqsave( &priv->dp_port_lock, flags );
        priv->dp_write_urb_in_use = 0;
        priv->dp_in_close = 0;