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