From cd2b4dd3226c7411c43177606f8738c16987ebe7 Mon Sep 17 00:00:00 2001 From: c-bata Date: Thu, 18 Oct 2018 01:58:55 +0900 Subject: [PATCH] Retry syscall.Write in Flush --- output_posix.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/output_posix.go b/output_posix.go index b18cf32..8e91b90 100644 --- a/output_posix.go +++ b/output_posix.go @@ -3,9 +3,12 @@ package prompt import ( + "log" "syscall" ) +const flushMaxRetryCount = 3 + // PosixWriter is a ConsoleWriter implementation for POSIX environment. // To control terminal emulator, this outputs VT100 escape sequences. type PosixWriter struct { @@ -17,9 +20,15 @@ type PosixWriter struct { func (w *PosixWriter) Flush() error { l := len(w.buffer) offset := 0 + retry := 0 for { n, err := syscall.Write(w.fd, w.buffer[offset:]) if err != nil { + log.Printf("[DEBUG] flush error: %s", err) + if retry < flushMaxRetryCount { + retry++ + continue + } return err } offset += n