diff options
author | Adin Scannell <ascannell@google.com> | 2021-02-12 17:11:14 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-02-12 17:13:44 -0800 |
commit | 3ef012944d32313cee4df244585f48e8d4fd8e9e (patch) | |
tree | 8c406fdab9db7ef5305d384ef64eff4ff6fdd581 | |
parent | 33c617cae3d6e5261e67090faf52c4101f5b7713 (diff) |
Stop the control server only once.
Operations are now shut down automatically by the main Stop
command, and it is not necessary to call Stop during Destroy.
Fixes #5454
PiperOrigin-RevId: 357295930
-rw-r--r-- | runsc/boot/loader.go | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/runsc/boot/loader.go b/runsc/boot/loader.go index 77a7c530b..a02eb2ec5 100644 --- a/runsc/boot/loader.go +++ b/runsc/boot/loader.go @@ -477,14 +477,16 @@ func createProcessArgs(id string, spec *specs.Spec, creds *auth.Credentials, k * // been closed. For that reason, this should NOT be called in a defer, because // a panic in a control server rpc would then hang forever. func (l *Loader) Destroy() { - if l.ctrl != nil { - l.ctrl.srv.Stop() - } if l.stopSignalForwarding != nil { l.stopSignalForwarding() } l.watchdog.Stop() + // Stop the control server. This will indirectly stop any + // long-running control operations that are in flight, e.g. + // profiling operations. + l.ctrl.stop() + // Release all kernel resources. This is only safe after we can no longer // save/restore. l.k.Release() @@ -1055,9 +1057,6 @@ func (l *Loader) WaitExit() kernel.ExitStatus { // Wait for container. l.k.WaitExited() - // Stop the control server. - l.ctrl.stop() - // Check all references. refs.OnExit() |