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
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
56fb100140
commit
0b2023130e
2 changed files with 5 additions and 1 deletions
|
@ -225,8 +225,9 @@ func (ctr *container) discardFifos() {
|
||||||
f := ctr.fifo(i)
|
f := ctr.fifo(i)
|
||||||
c := make(chan struct{})
|
c := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
|
r := openReaderFromFifo(f)
|
||||||
close(c) // this channel is used to not close the writer too early, before readonly open has been called.
|
close(c) // this channel is used to not close the writer too early, before readonly open has been called.
|
||||||
io.Copy(ioutil.Discard, openReaderFromFifo(f))
|
io.Copy(ioutil.Discard, r)
|
||||||
}()
|
}()
|
||||||
<-c
|
<-c
|
||||||
closeReaderFifo(f) // avoid blocking permanently on open if there is no writer side
|
closeReaderFifo(f) // avoid blocking permanently on open if there is no writer side
|
||||||
|
|
|
@ -79,7 +79,9 @@ func (r emptyReader) Read(b []byte) (int, error) {
|
||||||
|
|
||||||
func openReaderFromFifo(fn string) io.Reader {
|
func openReaderFromFifo(fn string) io.Reader {
|
||||||
r, w := io.Pipe()
|
r, w := io.Pipe()
|
||||||
|
c := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
|
close(c)
|
||||||
stdoutf, err := os.OpenFile(fn, syscall.O_RDONLY, 0)
|
stdoutf, err := os.OpenFile(fn, syscall.O_RDONLY, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.CloseWithError(err)
|
r.CloseWithError(err)
|
||||||
|
@ -90,6 +92,7 @@ func openReaderFromFifo(fn string) io.Reader {
|
||||||
w.Close()
|
w.Close()
|
||||||
stdoutf.Close()
|
stdoutf.Close()
|
||||||
}()
|
}()
|
||||||
|
<-c // wait for the goroutine to get scheduled and syscall to block
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue