container: skip waitAll

This commit is contained in:
criyle 2025-04-03 23:21:14 +00:00
parent ea0b084794
commit 1e890d6475
4 changed files with 15 additions and 9 deletions

View File

@ -124,6 +124,14 @@ func (c *containerServer) handleExecve(cmd *execCmd, msg unixsocket.Msg) error {
if cmd.SyncAfter { if cmd.SyncAfter {
if err := syncPid(1); err != nil { if err := syncPid(1); err != nil {
syscall.Kill(-1, syscall.SIGKILL) syscall.Kill(-1, syscall.SIGKILL)
c.waitPid <- pid
ret := <-c.waitPidResult
err := c.sendReply(convertReply(ret), unixsocket.Msg{})
c.waitAll <- struct{}{}
<-c.waitAllDone
return err
} }
} }
return c.handleExecveStarted(pid) return c.handleExecveStarted(pid)
@ -164,7 +172,7 @@ func (c *containerServer) handleExecveStarted(pid int) error {
} }
} }
<-c.waitAllDone <-c.waitAllDone
return c.sendReply(reply{}, unixsocket.Msg{}) return nil
} }
func convertReply(ret waitPidResult) reply { func convertReply(ret waitPidResult) reply {

View File

@ -45,7 +45,7 @@ type ExecveParam struct {
SyncAfterExec bool SyncAfterExec bool
} }
// Execve runs process inside container. It accepts context cancelation as time limit exceeded. // Execve runs process inside container. It accepts context cancellation as time limit exceeded.
func (c *container) Execve(ctx context.Context, param ExecveParam) runner.Result { func (c *container) Execve(ctx context.Context, param ExecveParam) runner.Result {
c.mu.Lock() c.mu.Lock()
defer c.mu.Unlock() defer c.mu.Unlock()
@ -122,13 +122,11 @@ func (c *container) waitForDone(ctx context.Context, sTime time.Time) runner.Res
case <-ctx.Done(): // cancel case <-ctx.Done(): // cancel
c.sendCmd(cmd{Cmd: cmdKill}, unixsocket.Msg{}) // kill c.sendCmd(cmd{Cmd: cmdKill}, unixsocket.Msg{}) // kill
reply, _, _ := c.recvReply() reply, _, err := c.recvReply()
_, _, err := c.recvReply()
return convertReplyResult(reply, sTime, mTime, err) return convertReplyResult(reply, sTime, mTime, err)
case ret := <-c.recvCh: // result case ret := <-c.recvCh: // result
c.sendCmd(cmd{Cmd: cmdKill}, unixsocket.Msg{}) // kill err := c.sendCmd(cmd{Cmd: cmdKill}, unixsocket.Msg{}) // kill
_, _, err := c.recvReply()
return convertReplyResult(ret.Reply, sTime, mTime, err) return convertReplyResult(ret.Reply, sTime, mTime, err)
} }
} }

2
go.mod
View File

@ -4,6 +4,6 @@ go 1.24
require ( require (
github.com/elastic/go-seccomp-bpf v1.5.0 github.com/elastic/go-seccomp-bpf v1.5.0
golang.org/x/net v0.37.0 golang.org/x/net v0.38.0
golang.org/x/sys v0.31.0 golang.org/x/sys v0.31.0
) )

4
go.sum
View File

@ -6,8 +6,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=