1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/container
Paweł Gronowski a290f5d04c state/Wait: Fix race when reading exit status
Before this change there was a race condition between State.Wait reading
the exit code from State and the State being changed instantly after the
change which ended the State.Wait.

Now, each State.Wait has its own channel which is used to transmit the
desired StateStatus at the time the state transitions to the awaited
one. Wait no longer reads the status by itself so there is no race.

The issue caused the `docker run --restart=always ...' to sometimes exit
with 0 exit code, because the process was already restarted by the time
State.Wait got the chance to read the exit code.

Test run
--------
Before:
```
$ go test -count 1 -run TestCorrectStateWaitResultAfterRestart .
--- FAIL: TestCorrectStateWaitResultAfterRestart (0.00s)
    state_test.go:198: expected exit code 10, got 0
FAIL
FAIL    github.com/docker/docker/container      0.011s
FAIL

```

After:
```
$ go test -count 1 -run TestCorrectStateWaitResultAfterRestart .
ok      github.com/docker/docker/container      0.011s
```

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
2022-07-20 09:23:31 +02:00
..
stream
archive.go
container.go state/Wait: Fix race when reading exit status 2022-07-20 09:23:31 +02:00
container_unit_test.go container: StopSignal(): return syscall.Signal 2022-05-05 00:53:53 +02:00
container_unix.go
container_windows.go
env.go
env_test.go
health.go
history.go
memory_store.go
memory_store_test.go
monitor.go
mounts_unix.go
mounts_windows.go
state.go state/Wait: Fix race when reading exit status 2022-07-20 09:23:31 +02:00
state_test.go state/Wait: Fix race when reading exit status 2022-07-20 09:23:31 +02:00
store.go
view.go Use hashicorp/go-memdb instead of truncindex 2022-05-20 18:22:21 +02:00
view_test.go Use hashicorp/go-memdb instead of truncindex 2022-05-20 18:22:21 +02:00