From 3ef012944d32313cee4df244585f48e8d4fd8e9e Mon Sep 17 00:00:00 2001 From: Adin Scannell Date: Fri, 12 Feb 2021 17:11:14 -0800 Subject: [PATCH] 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 --- runsc/boot/loader.go | 11 +++++------ 1 file 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()