diff --git a/Makefile b/Makefile index 113348d..73d1c0c 100644 --- a/Makefile +++ b/Makefile @@ -7,5 +7,11 @@ test: which gotestsum || go install gotest.tools/gotestsum@latest gotestsum --format "testname" -- -tags="timetzdata sqlite_fts5 sqlite_foreign_keys" "./..." +test-in-docker: + tag="goext_temp_test_image:$(shell uuidgen | tr -d '-')"; \ + docker build --tag $$tag . -f .gitea/workflows/Dockerfile_tests; \ + docker run --rm $$tag; \ + docker rmi $$tag + version: _data/version.sh \ No newline at end of file diff --git a/cmdext/cmdrunner.go b/cmdext/cmdrunner.go index 7007b4b..c989a46 100644 --- a/cmdext/cmdrunner.go +++ b/cmdext/cmdrunner.go @@ -133,9 +133,6 @@ func run(opt CommandRunner) (CommandResult, error) { case <-stderrFailChan: _ = cmd.Process.Kill() - for _, lstr := range opt.listener { - lstr.Timeout() - } if fallback, ok := syncext.ReadChannelWithTimeout(outputChan, 32*time.Millisecond); ok { // most of the time the cmd.Process.Kill() should also have finished the pipereader @@ -160,7 +157,8 @@ func run(opt CommandRunner) (CommandResult, error) { } case outobj := <-outputChan: - if exiterr, ok := outobj.err.(*exec.ExitError); ok { + var exiterr *exec.ExitError + if errors.As(outobj.err, &exiterr) { excode := exiterr.ExitCode() for _, lstr := range opt.listener { lstr.Finished(excode) diff --git a/cmdext/pipereader.go b/cmdext/pipereader.go index 4812eff..eb6d706 100644 --- a/cmdext/pipereader.go +++ b/cmdext/pipereader.go @@ -32,8 +32,8 @@ func (pr *pipeReader) Read(listener []CommandListener) (string, string, string, stdout := "" go func() { buf := make([]byte, 128) - for true { - n, out := pr.stdout.Read(buf) + for { + n, err := pr.stdout.Read(buf) if n > 0 { txt := string(buf[:n]) stdout += txt @@ -42,11 +42,11 @@ func (pr *pipeReader) Read(listener []CommandListener) (string, string, string, lstr.ReadRawStdout(buf[:n]) } } - if out == io.EOF { + if err == io.EOF { break } - if out != nil { - errch <- out + if err != nil { + errch <- err break } } @@ -61,7 +61,7 @@ func (pr *pipeReader) Read(listener []CommandListener) (string, string, string, stderr := "" go func() { buf := make([]byte, 128) - for true { + for { n, err := pr.stderr.Read(buf) if n > 0 { diff --git a/goextVersion.go b/goextVersion.go index 6ff4f15..d475aae 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.270" +const GoextVersion = "0.0.271" -const GoextVersionTimestamp = "2023-09-25T11:35:03+0200" +const GoextVersionTimestamp = "2023-09-26T14:32:45+0200" diff --git a/syncext/atomic.go b/syncext/atomic.go index e9228f2..9c482ec 100644 --- a/syncext/atomic.go +++ b/syncext/atomic.go @@ -27,10 +27,12 @@ func (a *AtomicBool) Get() bool { return a.v } -func (a *AtomicBool) Set(value bool) { +func (a *AtomicBool) Set(value bool) bool { a.lock.Lock() defer a.lock.Unlock() + oldValue := a.v + a.v = value for k, v := range a.listener { @@ -42,6 +44,8 @@ func (a *AtomicBool) Set(value bool) { delete(a.listener, k) } } + + return oldValue } func (a *AtomicBool) Wait(waitFor bool) {