mirror of
https://github.com/containers/podman.git
synced 2025-06-24 19:42:56 +08:00
Merge pull request #17126 from vrothberg/fix-16142
container kill: handle stopped/exited container
This commit is contained in:
@ -429,6 +429,10 @@ func (r *ConmonOCIRuntime) StopContainer(ctr *Container, timeout uint, all bool)
|
||||
}
|
||||
|
||||
if err := r.KillContainer(ctr, uint(unix.SIGKILL), all); err != nil {
|
||||
// Ignore the error if KillContainer complains about it already
|
||||
// being stopped or exited. There's an inherent race with the
|
||||
// cleanup process (see #16142).
|
||||
if !(errors.Is(err, define.ErrCtrStateInvalid) && ctr.ensureState(define.ContainerStateStopped, define.ContainerStateExited)) {
|
||||
// If the PID is 0, then the container is already stopped.
|
||||
if ctr.state.PID == 0 {
|
||||
return nil
|
||||
@ -439,6 +443,7 @@ func (r *ConmonOCIRuntime) StopContainer(ctr *Container, timeout uint, all bool)
|
||||
}
|
||||
return fmt.Errorf("sending SIGKILL to container %s: %w", ctr.ID(), err)
|
||||
}
|
||||
}
|
||||
|
||||
// Give runtime a few seconds to make it happen
|
||||
if err := waitContainerStop(ctr, killContainerTimeout); err != nil {
|
||||
|
@ -608,6 +608,7 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container) (_ *Contai
|
||||
// be removed also if and only if the container is the sole user
|
||||
// Otherwise, RemoveContainer will return an error if the container is running
|
||||
func (r *Runtime) RemoveContainer(ctx context.Context, c *Container, force bool, removeVolume bool, timeout *uint) error {
|
||||
// NOTE: container will be locked down the road.
|
||||
return r.removeContainer(ctx, c, force, removeVolume, false, false, timeout)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user