Bug 205398

Summary: [regression] [tty] tty_drain() kernel function lacks timeout support it had before
Product: Base System Reporter: Eugene Grosbein <ports>
Component: kernAssignee: freebsd-bugs (Nobody) <bugs>
Status: New ---    
Severity: Affects Some People CC: ed, emaste
Priority: --- Keywords: regression
Version: 9.3-STABLE   
Hardware: Any   
OS: Any   

Description Eugene Grosbein 2015-12-18 13:43:21 UTC
Revision 181905 by ed@freebsd.org brought the new MPSAFE TTY layer and removed "drainwain" timeout support. Now applications working with serial port can hang forever on close() system call:

- an application opens /dev/cuau0 in non-blocing i/o mode and tries to detect GSM gateway there writing commands like ATZ, ATE1 etc. to the device;
- the device may be dead (lost power, broken, disconnected etc.) and does not answer back;
- application timeouts waiting for answer and closes device with close()
- tty layer tries to drain output "forever", until a signal arrives.

gnokii (comms/gnokii) suffers from this problem.

Please re-implement tunable timeout and TIOCSDRAINWAIT syscall kernel has before.