void disestablish_ppp(int tty_fd)
{
+ int nout;
+
+ if (!hungup) {
/*
- * Attempt to restore the previous tty settings
+ * Flush the tty output buffer so that the TIOCSETD doesn't hang.
+ * We may have to do this several times because the tcflush only
+ * affects the serial driver, and may trigger the ppp driver to
+ * supply more data to the serial driver.
*/
- if (!hungup) {
+ do {
+ if (tcflush(tty_fd, TCIOFLUSH) < 0)
+ break;
+ nout = 0;
+ } while (ioctl(tty_fd, TIOCOUTQ, &nout) >= 0 && nout > 0);
/*
* Restore the previous line discipline
*/