Merge pull request #54 from shykes/vieux_merge_master
Merge from master
diff --git a/api.go b/api.go
index d9c1aa3..93322fd 100644
--- a/api.go
+++ b/api.go
@@ -647,9 +647,6 @@
}
name := vars["name"]
job := srv.Eng.Job("start", name)
- if err := job.ImportEnv(HostConfig{}); err != nil {
- return fmt.Errorf("Couldn't initialize host configuration")
- }
// allow a nil body for backwards compatibility
if r.Body != nil {
if matchesContentType(r.Header.Get("Content-Type"), "application/json") {
diff --git a/container.go b/container.go
index 02296da..11021b0 100644
--- a/container.go
+++ b/container.go
@@ -1302,9 +1302,6 @@
exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
}
- // Report status back
- container.State.setStopped(exitCode)
-
if container.runtime != nil && container.runtime.srv != nil {
container.runtime.srv.LogEvent("die", container.ID, container.runtime.repositories.ImageName(container.Image))
}
@@ -1317,6 +1314,9 @@
container.stdin, container.stdinPipe = io.Pipe()
}
+ // Report status back
+ container.State.setStopped(exitCode)
+
// Release the lock
close(container.waitLock)
diff --git a/runtime.go b/runtime.go
index 74516d1..9be57b4 100644
--- a/runtime.go
+++ b/runtime.go
@@ -134,9 +134,6 @@
}
container.rootfs = rootfs
- // init the wait lock
- container.waitLock = make(chan struct{})
-
container.runtime = runtime
// Attach to stdout and stderr
@@ -152,10 +149,6 @@
runtime.containers.PushBack(container)
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?
// 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
@@ -173,7 +166,6 @@
if err := container.Start(); err != nil {
return err
}
- nomonitor = true
} else {
utils.Debugf("Marking as stopped")
container.State.setStopped(-127)
@@ -181,16 +173,17 @@
return err
}
}
- }
- }
+ } else {
+ utils.Debugf("Reconnecting to container %v", container.ID)
- // If the container is not running or just has been flagged not running
- // then close the wait lock chan (will be reset upon start)
- if !container.State.Running {
- close(container.waitLock)
- } else if !nomonitor {
- container.allocateNetwork()
- go container.monitor()
+ if err := container.allocateNetwork(); err != nil {
+ return err
+ }
+
+ container.waitLock = make(chan struct{})
+
+ go container.monitor()
+ }
}
return nil
}