• zeripath's avatar
    Prevent dangling cat-file calls (goroutine alternative) (#19454) · 0dcc74a8
    zeripath authored
    
    
    If an `os/exec.Command` is passed non `*os.File` as an input/output, go
    will create `os.Pipe`s and wait for their closure in `cmd.Wait()`.  If
    the code following this is responsible for closing `io.Pipe`s or other
    handlers then on process death from context cancellation the `Wait` can
    hang.
    
    There are two possible solutions:
    
    1. use `os.Pipe` as the input/output as `cmd.Wait` does not wait for these.
    2. create a goroutine waiting on the context cancellation that will close the inputs.
    
    This PR provides the second option - which is a simpler change that can
    be more easily backported.
    
    Closes #19448
    Signed-off-by: default avatarAndrew Thornton <art27@cantab.net>
    0dcc74a8
batch_reader.go 9.2 KB