summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdin Scannell <ascannell@google.com>2021-02-12 17:11:14 -0800
committergVisor bot <gvisor-bot@google.com>2021-02-12 17:13:44 -0800
commit3ef012944d32313cee4df244585f48e8d4fd8e9e (patch)
tree8c406fdab9db7ef5305d384ef64eff4ff6fdd581
parent33c617cae3d6e5261e67090faf52c4101f5b7713 (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.go11
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()