Merge branch 'master' into vieux_merge_master

Conflicts:
	runtime.go
This commit is contained in:
Victor Vieux 2013-11-19 17:32:08 -08:00
commit cd022376b8
2 changed files with 13 additions and 20 deletions

View File

@ -1302,9 +1302,6 @@ func (container *Container) monitor() {
exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
} }
// Report status back
container.State.setStopped(exitCode)
if container.runtime != nil && container.runtime.srv != nil { if container.runtime != nil && container.runtime.srv != nil {
container.runtime.srv.LogEvent("die", container.ID, container.runtime.repositories.ImageName(container.Image)) container.runtime.srv.LogEvent("die", container.ID, container.runtime.repositories.ImageName(container.Image))
} }
@ -1317,6 +1314,9 @@ func (container *Container) monitor() {
container.stdin, container.stdinPipe = io.Pipe() container.stdin, container.stdinPipe = io.Pipe()
} }
// Report status back
container.State.setStopped(exitCode)
// Release the lock // Release the lock
close(container.waitLock) close(container.waitLock)

View File

@ -134,9 +134,6 @@ func (runtime *Runtime) Register(container *Container) error {
} }
container.rootfs = rootfs container.rootfs = rootfs
// init the wait lock
container.waitLock = make(chan struct{})
container.runtime = runtime container.runtime = runtime
// Attach to stdout and stderr // Attach to stdout and stderr
@ -152,10 +149,6 @@ func (runtime *Runtime) Register(container *Container) error {
runtime.containers.PushBack(container) runtime.containers.PushBack(container)
runtime.idIndex.Add(container.ID) runtime.idIndex.Add(container.ID)
// When we actually restart, Start() do the monitoring.
// However, when we simply 'reattach', we have to restart a monitor
nomonitor := false
// FIXME: if the container is supposed to be running but is not, auto restart it? // FIXME: if the container is supposed to be running but is not, auto restart it?
// if so, then we need to restart monitor and init a new lock // if so, then we need to restart monitor and init a new lock
// If the container is supposed to be running, make sure of it // If the container is supposed to be running, make sure of it
@ -173,7 +166,6 @@ func (runtime *Runtime) Register(container *Container) error {
if err := container.Start(); err != nil { if err := container.Start(); err != nil {
return err return err
} }
nomonitor = true
} else { } else {
utils.Debugf("Marking as stopped") utils.Debugf("Marking as stopped")
container.State.setStopped(-127) container.State.setStopped(-127)
@ -181,16 +173,17 @@ func (runtime *Runtime) Register(container *Container) error {
return err return err
} }
} }
} } else {
} utils.Debugf("Reconnecting to container %v", container.ID)
// If the container is not running or just has been flagged not running if err := container.allocateNetwork(); err != nil {
// then close the wait lock chan (will be reset upon start) return err
if !container.State.Running { }
close(container.waitLock)
} else if !nomonitor { container.waitLock = make(chan struct{})
container.allocateNetwork()
go container.monitor() go container.monitor()
}
} }
return nil return nil
} }