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:
parent
6142557cba
commit
47b7cf5ceb
1 changed files with 6 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue