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

Wait for the reader fifo opening to block

In a rare case exec process may return before open
gets called and the io will lock indefinitely.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi 2016-04-25 10:29:49 -07:00
parent b599a07911
commit 2bebacef5f

View file

@ -79,7 +79,9 @@ func (r emptyReader) Read(b []byte) (int, error) {
func openReaderFromFifo(fn string) io.Reader {
r, w := io.Pipe()
c := make(chan struct{})
go func() {
close(c)
stdoutf, err := os.OpenFile(fn, syscall.O_RDONLY, 0)
if err != nil {
r.CloseWithError(err)
@ -90,6 +92,7 @@ func openReaderFromFifo(fn string) io.Reader {
w.Close()
stdoutf.Close()
}()
<-c // wait for the goroutine to get scheduled and syscall to block
return r
}