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
This commit is contained in:
Adin Scannell 2021-02-12 17:11:14 -08:00 committed by gVisor bot
parent 33c617cae3
commit 3ef012944d
1 changed files with 5 additions and 6 deletions

View File

@ -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()