diff options
| author | Jeff Carr <[email protected]> | 2019-05-09 23:48:53 +0000 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2019-05-09 23:48:53 +0000 |
| commit | f1d7a816bed5798334b0ed67c768613e098941de (patch) | |
| tree | cb73afe69dd6c49ec5fe3984060520a7abc21061 | |
| parent | 026c59bc5c23630c1f918167e5237f315dc5895b (diff) | |
add total byte counts to track accurate flushing of buffers
Signed-off-by: Jeff Carr <[email protected]>
| -rw-r--r-- | shell.go | 41 |
1 files changed, 29 insertions, 12 deletions
@@ -72,25 +72,42 @@ func Run(cmdline string) int { newerrreader := bufio.NewReader(pstderr) nbrerr := nbreader.NewNBReader(newerrreader, 1024) + totalCount := 0 + for { time.Sleep(2 * time.Millisecond) // only check the buffer 500 times a second // log.Println("sleep done") - oneByte := make([]byte, 1024) - count, err := nbr.Read(oneByte) + // tight loop that reads 1K at a time until buffer is empty + for { + oneByte := make([]byte, 1024) + count, err := nbr.Read(oneByte) + totalCount += count - if (err != nil) { - // log.Println("Read() count = ", count, "err = ", err) - oneByte = make([]byte, 1024) - count, err = nbr.Read(oneByte) + if (err != nil) { + // log.Println("Read() count = ", count, "err = ", err) + oneByte = make([]byte, 1024) + count, err = nbr.Read(oneByte) + f.Write([]byte(string(oneByte))) + f.Flush() + } f.Write([]byte(string(oneByte))) f.Flush() + if (count == 0) { + break + } + } + + if (totalCount != 0) { + log.Println("totalCount = ", totalCount) } - f.Write([]byte(string(oneByte))) - f.Flush() - oneByte = make([]byte, 1024) - count, err = nbrerr.Read(oneByte) + // + // HANDLE STDERR + // HANDLE STDERR + // + oneByte := make([]byte, 1024) + count, err := nbrerr.Read(oneByte) if (err != nil) { oneByte = make([]byte, 1024) @@ -99,8 +116,8 @@ func Run(cmdline string) int { f.Flush() log.Println("Read() count = ", count, "err = ", err) - spew.Dump(process.Process) - spew.Dump(process.ProcessState) + // spew.Dump(process.Process) + // spew.Dump(process.ProcessState) err := process.Wait() if err != nil { spew.Dump(err.(*exec.ExitError)) |
