提交 eff6937a 编写于 作者: A Alan Cox 提交者: Linus Torvalds

tty: USB tty devices can block in tcdrain when unplugged

The underlying problem is that the device methods don't all correctly
handle disconnected status and some keep reporting bytes pending which
causes tcdrain to stall.

When the cable is unplugged they are definitely gone, and as this is true
for all USB cables we can fix it in the core usb serial code.
Signed-off-by: NAlan Cox <alan@redhat.com>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 39aced68
...@@ -339,6 +339,10 @@ static int serial_chars_in_buffer(struct tty_struct *tty) ...@@ -339,6 +339,10 @@ static int serial_chars_in_buffer(struct tty_struct *tty)
dbg("%s = port %d", __func__, port->number); dbg("%s = port %d", __func__, port->number);
WARN_ON(!port->port.count); WARN_ON(!port->port.count);
/* if the device was unplugged then any remaining characters
fell out of the connector ;) */
if (port->serial->disconnected)
return 0;
/* pass on to the driver specific version of this function */ /* pass on to the driver specific version of this function */
return port->serial->type->chars_in_buffer(tty); return port->serial->type->chars_in_buffer(tty);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册