diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-06-25 15:43:17 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-06-25 15:43:17 -0700 |
commit | e5526f4f2696a2334d61b05f31ad23b7bee4342b (patch) | |
tree | 537f2f2c048137c2483b94c127059cbaf54dd642 /runsc | |
parent | f00077e8d8d59ee6db93a3ece24c5f3f5156eda5 (diff) | |
parent | d703340bc04a4269f420fdf24d946abcbc6a620b (diff) |
Merge pull request #6222 from avagin:stop
PiperOrigin-RevId: 381561785
Diffstat (limited to 'runsc')
-rw-r--r-- | runsc/boot/controller.go | 6 | ||||
-rw-r--r-- | runsc/boot/loader_test.go | 2 | ||||
-rw-r--r-- | runsc/sandbox/sandbox.go | 6 |
3 files changed, 12 insertions, 2 deletions
diff --git a/runsc/boot/controller.go b/runsc/boot/controller.go index d52cf5a00..34f939953 100644 --- a/runsc/boot/controller.go +++ b/runsc/boot/controller.go @@ -18,6 +18,7 @@ import ( "errors" "fmt" "os" + gtime "time" specs "github.com/opencontainers/runtime-spec/specs-go" "golang.org/x/sys/unix" @@ -165,8 +166,11 @@ func newController(fd int, l *Loader) (*controller, error) { return ctrl, nil } +// stopRPCTimeout is the time for clients to complete ongoing RPCs. +const stopRPCTimeout = 15 * gtime.Second + func (c *controller) stop() { - c.srv.Stop() + c.srv.Stop(stopRPCTimeout) } // containerManager manages sandbox containers. diff --git a/runsc/boot/loader_test.go b/runsc/boot/loader_test.go index 93c476971..b5e8d08a5 100644 --- a/runsc/boot/loader_test.go +++ b/runsc/boot/loader_test.go @@ -214,7 +214,7 @@ func doStartSignal(t *testing.T, vfsEnabled bool) { // We aren't going to wait on this application, so the control server // needs to be shut down manually. - defer l.ctrl.srv.Stop() + defer l.ctrl.srv.Stop(time.Hour) // Start a goroutine that calls WaitForStartSignal and writes to a // channel when it returns. diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go index 29e202b7d..f14cc7229 100644 --- a/runsc/sandbox/sandbox.go +++ b/runsc/sandbox/sandbox.go @@ -797,7 +797,13 @@ func (s *Sandbox) Wait(cid string) (unix.WaitStatus, error) { // Try the Wait RPC to the sandbox. var ws unix.WaitStatus err = conn.Call(boot.ContainerWait, &cid, &ws) + conn.Close() if err == nil { + if s.IsRootContainer(cid) { + if err := s.waitForStopped(); err != nil { + return unix.WaitStatus(0), err + } + } // It worked! return ws, nil } |