That's interesting! Thanks Jason and Brian for educating me! Thanks! On Wednesday, 4 October 2023 at 20:36:10 UTC+8 Brian Candler wrote:
> Code reference: > > https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/os/exec/exec.go;l=523-565 > > * c.writerDescriptor creates the pipe, and a copying function is appended > to the slice c.goroutine. This slice contains the functions which will be > started in their own goroutines. > * c.childStdout calls c.writerDescriptor > * c.childStderr reuses the exiting childStdout if Stdout and Stderr are > the same (and therefore there is still only one function in c.goroutine) > * interfaceEqual implements the check that Jason quoted: > > https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/os/exec/exec.go;l=473-480 > > On Wednesday, 4 October 2023 at 05:58:29 UTC+1 Jason Phillips wrote: > >> From the Stdout/Stderr field documentation on the os/exec.Cmd type >> <https://pkg.go.dev/os/exec#Cmd>: >> >> "If Stdout and Stderr are the same writer, and have a type that can be >> compared with ==, at most one goroutine at a time will call Write." >> >> On Tuesday, October 3, 2023 at 9:55:16 PM UTC-4 王富民awaw wrote: >> >> exec.CombinedOutput uses the same io.Writer for both stdout and stderr >> in exec.go - Go (opensource.google) >> <https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/os/exec/exec.go;l=1003> >> . >> This io.Writer is written in exec.go - Go (opensource.google) >> <https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/os/exec/exec.go;l=717> >> . >> These two writes happens concurrently in two goroutines in exec.go - Go >> (opensource.google) >> <https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/os/exec/exec.go;l=717> >> . >> As far as I know, bytes.Buffer is not safe to concurrent writes. >> Is this not a race? >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/faa824a0-85a5-4e02-9ed3-9a451c2f0b1en%40googlegroups.com.