From 7946eb8e8d8303b1ee1da909dcdebf448f0b5cb7 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Thu, 10 Jun 2021 07:33:55 -0700 Subject: [PATCH] Wait for output to drain. Hopefully this fixes unpredicatable output when the program is stopping. --- nonblock_bsd.go | 3 ++- nonblock_unix.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/nonblock_bsd.go b/nonblock_bsd.go index ffe5caf8..28fd4644 100644 --- a/nonblock_bsd.go +++ b/nonblock_bsd.go @@ -26,6 +26,7 @@ import ( // tcSetBufParams is used by the tty driver on UNIX systems to configure the // buffering parameters (minimum character count and minimum wait time in msec.) +// This also waits for output to drain first. func tcSetBufParams(fd int, vMin uint8, vTime uint8) error { _ = syscall.SetNonblock(fd, true) tio, err := unix.IoctlGetTermios(fd, unix.TIOCGETA) @@ -34,7 +35,7 @@ func tcSetBufParams(fd int, vMin uint8, vTime uint8) error { } tio.Cc[unix.VMIN] = vMin tio.Cc[unix.VTIME] = vTime - if err = unix.IoctlSetTermios(fd, unix.TIOCSETA, tio); err != nil { + if err = unix.IoctlSetTermios(fd, unix.TIOCSETAW, tio); err != nil { return err } return nil diff --git a/nonblock_unix.go b/nonblock_unix.go index 768128d7..fe31844c 100644 --- a/nonblock_unix.go +++ b/nonblock_unix.go @@ -24,6 +24,7 @@ import ( // tcSetBufParams is used by the tty driver on UNIX systems to configure the // buffering parameters (minimum character count and minimum wait time in msec.) +// This also waits for output to drain first. func tcSetBufParams(fd int, vMin uint8, vTime uint8) error { _ = syscall.SetNonblock(fd, true) tio, err := unix.IoctlGetTermios(fd, unix.TCGETS) @@ -32,7 +33,7 @@ func tcSetBufParams(fd int, vMin uint8, vTime uint8) error { } tio.Cc[unix.VMIN] = vMin tio.Cc[unix.VTIME] = vTime - if err = unix.IoctlSetTermios(fd, unix.TCSETS, tio); err != nil { + if err = unix.IoctlSetTermios(fd, unix.TCSETSW, tio); err != nil { return err } return nil