Skip to content

Commit

Permalink
Issue yuin#181 : fix possible hang-up on os.Cmd#Wait
Browse files Browse the repository at this point in the history
  • Loading branch information
yuin committed Jun 11, 2018
1 parent b0fa786 commit ca850f5
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions iolib.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type lFile struct {
pp *exec.Cmd
writer io.Writer
reader *bufio.Reader
stdout io.ReadCloser
closed bool
}

Expand Down Expand Up @@ -71,7 +72,7 @@ func newFile(L *LState, file *os.File, path string, flag int, perm os.FileMode,
return nil, err
}
}
lfile := &lFile{fp: file, pp: nil, writer: nil, reader: nil, closed: false}
lfile := &lFile{fp: file, pp: nil, writer: nil, reader: nil, stdout: nil, closed: false}
ud.Value = lfile
if writable {
lfile.writer = file
Expand All @@ -87,17 +88,16 @@ func newProcess(L *LState, cmd string, writable, readable bool) (*LUserData, err
ud := L.NewUserData()
c, args := popenArgs(cmd)
pp := exec.Command(c, args...)
lfile := &lFile{fp: nil, pp: pp, writer: nil, reader: nil, closed: false}
lfile := &lFile{fp: nil, pp: pp, writer: nil, reader: nil, stdout: nil, closed: false}
ud.Value = lfile

var err error
if writable {
lfile.writer, err = pp.StdinPipe()
}
if readable {
var reader io.Reader
reader, err = pp.StdoutPipe()
lfile.reader = bufio.NewReaderSize(reader, fileDefaultReadBuffer)
lfile.stdout, err = pp.StdoutPipe()
lfile.reader = bufio.NewReaderSize(lfile.stdout, fileDefaultReadBuffer)
}
if err != nil {
return nil, err
Expand Down Expand Up @@ -278,6 +278,9 @@ func fileCloseAux(L *LState, file *lFile) int {
L.Push(LTrue)
return 1
case lFileProcess:
if file.stdout != nil {
file.stdout.Close() // ignore errors
}
err = file.pp.Wait()
var exitStatus int // Initialised to zero value = 0
if err != nil {
Expand Down

0 comments on commit ca850f5

Please sign in to comment.