From 529b453ba2baa90969c8333d1b15ccee52add5dc Mon Sep 17 00:00:00 2001 From: Joseph Poirier Date: Mon, 14 Mar 2016 02:23:03 -0500 Subject: [PATCH] sdr: replace Scan due to a report that it was still blocking, split stderr and stdout --- main/sdr.go | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/main/sdr.go b/main/sdr.go index d5e7db36..774cec1a 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -10,7 +10,6 @@ package main import ( - "bufio" "log" "os/exec" "regexp" @@ -71,9 +70,6 @@ func (e *ES) read() { log.Println("Executed /usr/bin/dump1090 successfully...") - scanStdout := bufio.NewScanner(stdout) - scanStderr := bufio.NewScanner(stderr) - done := make(chan bool) go func() { @@ -94,27 +90,32 @@ func (e *ES) read() { } }() + stdoutBuf := make([]byte, 1024) + stderrBuf := make([]byte, 1024) go func() { for { select { case <-done: return default: - if scanStdout.Scan() { - replayLog(scanStdout.Text(), MSGCLASS_DUMP1090) - } - if err := scanStdout.Err(); err != nil { - log.Printf("scanStdout error: %s\n", err) + n, err := stdout.Read(stdoutBuf) + if err == nil && n > 0 { + replayLog(string(stdoutBuf[:n]), MSGCLASS_DUMP1090) } + } + } + }() - if scanStderr.Scan() { - replayLog(scanStderr.Text(), MSGCLASS_DUMP1090) + go func() { + for { + select { + case <-done: + return + default: + n, err := stderr.Read(stderrBuf) + if err == nil && n > 0 { + replayLog(string(stderrBuf[:n]), MSGCLASS_DUMP1090) } - if err := scanStderr.Err(); err != nil { - log.Printf("scanStderr error: %s\n", err) - } - - time.Sleep(1 * time.Second) } } }()