Merge pull request #9624 from mheon/fix_9615
[NO TESTS NEEDED] Do not return from c.stop() before re-locking
This commit is contained in:
commit
44e6d20023
|
|
@ -1307,9 +1307,7 @@ func (c *Container) stop(timeout uint) error {
|
|||
c.lock.Unlock()
|
||||
}
|
||||
|
||||
if err := c.ociRuntime.StopContainer(c, timeout, all); err != nil {
|
||||
return err
|
||||
}
|
||||
stopErr := c.ociRuntime.StopContainer(c, timeout, all)
|
||||
|
||||
if !c.batched {
|
||||
c.lock.Lock()
|
||||
|
|
@ -1318,13 +1316,23 @@ func (c *Container) stop(timeout uint) error {
|
|||
// If the container has already been removed (e.g., via
|
||||
// the cleanup process), there's nothing left to do.
|
||||
case define.ErrNoSuchCtr, define.ErrCtrRemoved:
|
||||
return nil
|
||||
return stopErr
|
||||
default:
|
||||
if stopErr != nil {
|
||||
logrus.Errorf("Error syncing container %s status: %v", c.ID(), err)
|
||||
return stopErr
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We have to check stopErr *after* we lock again - otherwise, we have a
|
||||
// change of panicing on a double-unlock. Ref: GH Issue 9615
|
||||
if stopErr != nil {
|
||||
return stopErr
|
||||
}
|
||||
|
||||
// Since we're now subject to a race condition with other processes who
|
||||
// may have altered the state (and other data), let's check if the
|
||||
// state has changed. If so, we should return immediately and log a
|
||||
|
|
|
|||
Loading…
Reference in New Issue