Timeout the shim on Accept and Wait. https://build.chromium.org/p/client.boringssl/builders/linux_fips_rel/builds/115 appears to have failed because we were hanging on Accept() forever. Impose a timeout on that and waiting for the process to return so we at least can see what stdout/stderr was received so far. Change-Id: Ief7f7759d02a3fbfc504d2f214b742672b0fe9e6 Reviewed-on: https://boringssl-review.googlesource.com/16005 Commit-Queue: David Benjamin <davidben@google.com> Commit-Queue: Adam Langley <agl@google.com> Reviewed-by: Adam Langley <agl@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/ssl/test/runner/runner.go b/ssl/test/runner/runner.go index 55e22b6..0b66106 100644 --- a/ssl/test/runner/runner.go +++ b/ssl/test/runner/runner.go
@@ -844,13 +844,14 @@ // accept accepts a connection from listener, unless waitChan signals a process // exit first. -func acceptOrWait(listener net.Listener, waitChan chan error) (net.Conn, error) { +func acceptOrWait(listener *net.TCPListener, waitChan chan error) (net.Conn, error) { type connOrError struct { conn net.Conn err error } connChan := make(chan connOrError, 1) go func() { + listener.SetDeadline(time.Now().Add(*idleTimeout)) conn, err := listener.Accept() connChan <- connOrError{conn, err} close(connChan) @@ -1047,7 +1048,21 @@ listener.Close() listener = nil + var shimKilledLock sync.Mutex + var shimKilled bool + waitTimeout := time.AfterFunc(*idleTimeout, func() { + shimKilledLock.Lock() + shimKilled = true + shimKilledLock.Unlock() + shim.Process.Kill() + }) childErr := <-waitChan + waitTimeout.Stop() + shimKilledLock.Lock() + if shimKilled && err == nil { + err = errors.New("timeout waiting for the shim to exit.") + } + shimKilledLock.Unlock() var isValgrindError bool if exitError, ok := childErr.(*exec.ExitError); ok { switch exitError.Sys().(syscall.WaitStatus).ExitStatus() {