mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
secbench: Read stdout before waiting for process.
Go's `command.Cmd.Wait` closes stdout, so this can race with the stdout reader goroutine. PiperOrigin-RevId: 572983626
This commit is contained in:
committed by
gVisor bot
parent
3cbedad3da
commit
24850a4d51
@@ -21,7 +21,6 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -85,14 +84,6 @@ func runRequest(runReq secbenchdef.BenchRunRequest) (secbenchdef.BenchRunRespons
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("cannot attach pipe to stdout: %v", err)
|
||||
}
|
||||
defer stdout.Close()
|
||||
var stdoutData []byte
|
||||
var stdoutErr error
|
||||
var stdoutWait sync.WaitGroup
|
||||
stdoutWait.Add(1)
|
||||
go func() {
|
||||
defer stdoutWait.Done()
|
||||
stdoutData, stdoutErr = io.ReadAll(stdout)
|
||||
}()
|
||||
if err := cmd.Start(); err != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("cannot start runner: %v", err)
|
||||
}
|
||||
@@ -102,13 +93,13 @@ func runRequest(runReq secbenchdef.BenchRunRequest) (secbenchdef.BenchRunRespons
|
||||
if err := stdin.Close(); err != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("cannot close runner stdin pipe: %v", err)
|
||||
}
|
||||
stdoutData, err := io.ReadAll(stdout)
|
||||
if err != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("failed to read from runner stdout: %v", err)
|
||||
}
|
||||
if err := cmd.Wait(); err != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("runner failed: %v", err)
|
||||
}
|
||||
stdoutWait.Wait()
|
||||
if stdoutErr != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("failed to read from runner stdout: %v", stdoutErr)
|
||||
}
|
||||
var runResp secbenchdef.BenchRunResponse
|
||||
if err := json.Unmarshal(stdoutData, &runResp); err != nil {
|
||||
return secbenchdef.BenchRunResponse{}, fmt.Errorf("cannot unmarshal response: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user