Fix missing unlock in libcontainerd.Restore()

This was preventing the "exit" event to be correctly processed during
the restore process without live-restore enabled.

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
(cherry picked from commit ac068a1f9d)
Signed-off-by: Tibor Vass <tibor@docker.com>
This commit is contained in:
Kenfe-Mickael Laventure 2016-07-22 15:21:10 -07:00 committed by Tibor Vass
parent 6142557cba
commit 47b7cf5ceb

View file

@ -544,6 +544,8 @@ func (clnt *client) Restore(containerID string, options ...CreateOption) error {
if err := clnt.Signal(containerID, int(syscall.SIGTERM)); err != nil {
logrus.Errorf("libcontainerd: error sending sigterm to %v: %v", containerID, err)
}
// Let the main loop handle the exit event
clnt.remote.Unlock()
select {
case <-time.After(10 * time.Second):
if err := clnt.Signal(containerID, int(syscall.SIGKILL)); err != nil {
@ -552,9 +554,13 @@ func (clnt *client) Restore(containerID string, options ...CreateOption) error {
select {
case <-time.After(2 * time.Second):
case <-w.wait():
// relock because of the defer
clnt.remote.Lock()
return nil
}
case <-w.wait():
// relock because of the defer
clnt.remote.Lock()
return nil
}