From 3cd747f77bdedb8ebbb13f9072871388c12ae876 Mon Sep 17 00:00:00 2001 From: Khashayar Fereidani Date: Wed, 24 Jun 2026 09:11:03 +0000 Subject: [PATCH 1/2] Fix non-constant format string in buffer length error. --- ethr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethr.go b/ethr.go index d1a9c21..cf510c8 100644 --- a/ethr.go +++ b/ethr.go @@ -206,7 +206,7 @@ func main() { } bufLen := unitToNumber(*bufLenStr) if bufLen == 0 { - printUsageError(fmt.Sprintf("Invalid length specified: %s" + *bufLenStr)) + printUsageError(fmt.Sprintf("Invalid length specified: %s", *bufLenStr)) } // Check specific bwRate if any. From 631c64f78ae036dabce61dea737245e6b3c74218 Mon Sep 17 00:00:00 2001 From: Khashayar Fereidani Date: Wed, 24 Jun 2026 09:11:03 +0000 Subject: [PATCH 2/2] Close log file deterministically on shutdown. --- log.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/log.go b/log.go index 9774b23..fb81d53 100644 --- a/log.go +++ b/log.go @@ -10,6 +10,7 @@ import ( "fmt" "log" "os" + "sync" "time" ) @@ -60,6 +61,8 @@ type logTestResults struct { var loggingActive = false var logChan = make(chan string, 64) +var logDone = make(chan struct{}) +var logFiniOnce sync.Once func logInit(fileName string) { if fileName == "" { @@ -77,15 +80,25 @@ func logInit(fileName string) { } func logFini() { - loggingActive = false + // Signal runLogger to stop. Without this the goroutine blocks forever on + // the logChan receive and the log file is never closed. The once guard + // keeps logFini safe to call more than once. + logFiniOnce.Do(func() { + loggingActive = false + close(logDone) + }) } func runLogger(logFile *os.File) { - for loggingActive { - s := <-logChan - log.Println(s) + for { + select { + case <-logDone: + _ = logFile.Close() + return + case s := <-logChan: + log.Println(s) + } } - logFile.Close() } func logMsg(prefix, msg string) {