mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-18 23:04:20 +01:00
runtime: clean up shim abstraction
This PR will delete shim abstraction from sandbox. Fixes: #364 Signed-off-by: bin liu <bin@hyper.sh>
This commit is contained in:
@@ -1051,51 +1051,9 @@ func (c *Container) stop(force bool) error {
|
||||
return err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
span, _ := c.trace("stopShim")
|
||||
defer span.Finish()
|
||||
|
||||
// If shim is still running something went wrong
|
||||
// Make sure we stop the shim process
|
||||
if running, _ := isShimRunning(c.process.Pid); running {
|
||||
l := c.Logger()
|
||||
l.Error("Failed to stop container so stopping dangling shim")
|
||||
if err := stopShim(c.process.Pid); err != nil {
|
||||
l.WithError(err).Warn("failed to stop shim")
|
||||
}
|
||||
}
|
||||
|
||||
}()
|
||||
|
||||
// Here we expect that stop() has been called because the container
|
||||
// process returned or because it received a signal. In case of a
|
||||
// signal, we want to give it some time to end the container process.
|
||||
// However, if the signal didn't reach its goal, the caller still
|
||||
// expects this container to be stopped, that's why we should not
|
||||
// return an error, but instead try to kill it forcefully.
|
||||
if err := waitForShim(c.process.Pid); err != nil {
|
||||
// Force the container to be killed.
|
||||
if err := c.kill(syscall.SIGKILL, true); err != nil && !force {
|
||||
return err
|
||||
}
|
||||
|
||||
// Wait for the end of container process. We expect this call
|
||||
// to succeed. Indeed, we have already given a second chance
|
||||
// to the container by trying to kill it with SIGKILL, there
|
||||
// is no reason to try to go further if we got an error.
|
||||
if err := waitForShim(c.process.Pid); err != nil && !force {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Force the container to be killed. For most of the cases, this
|
||||
// should not matter and it should return an error that will be
|
||||
// ignored.
|
||||
// But for the specific case where the shim has been SIGKILL'ed,
|
||||
// the container is still running inside the VM. And this is why
|
||||
// this signal will ensure the container will get killed to match
|
||||
// the state of the shim. This will allow the following call to
|
||||
// stopContainer() to succeed in such particular case.
|
||||
c.kill(syscall.SIGKILL, true)
|
||||
|
||||
// Since the agent has supported the MultiWaitProcess, it's better to
|
||||
|
||||
Reference in New Issue
Block a user