1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

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>
This commit is contained in:
Kenfe-Mickael Laventure 2016-07-22 15:21:10 -07:00
parent 5231c55346
commit ac068a1f9d

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