summaryrefslogtreecommitdiffhomepage
path: root/runsc
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 /runsc
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
Diffstat (limited to 'runsc')
-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()