{"push_id":953454862,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"3a0910e0b8ffb006a483b3a38777f997b978ff88","before":"fdeb7e219b329932d8d1c020486a1717fce52df4","commits":[{"sha":"3a0910e0b8ffb006a483b3a38777f997b978ff88","author":{"email":"fad2cb820974e641592e72f253a250e857b58c83@google.com","name":"Todd Wang"},"message":"TBR lib: Change gosh.Cmd.StdinPipe to have unlimited-size.\n\nIt's more convenient for users if StdinPipe has an unlimited\nsize; otherwise they need to worry about deadlock.  You might\nthink we could just use our buffered pipe and be done with it,\nbut it's pretty tricky.  In particular os/exec will create its\nown os.Pipe and a copier goroutine if we don't pass in a *os.File\nfor exec.Cmd.Stdin, and exec.Cmd.Wait will wait for that\ngoroutine to finish.\n\nNote that we can't call exec.Cmd.StdinPipe; that ensures that\nClose is only called once, but doesn't ensure Write and Close\ncalls are synchronous.  This makes a race possible: the user may\ncall Write on the StdinPipe, concurrently with the exit-waiter\ngoroutine calling Close on the StdinPipe when the process exits.\nThis race has shown up on jenkins, and is also easily\nreproduced (under heavy machine load) with the new test.\n\nTo make this all work, we create our own os.Pipe that we set for\nexec.Cmd.Stdin, and also create a buffered pipe, along with our\nown copier goroutine.\n\nMultiPart: 1/3\n\nChange-Id: I3a7ed86164d1c4427ba55a88dac559f34fdd23b5","distinct":true,"url":"https://api.github.com/repos/vanadium/go.lib/commits/3a0910e0b8ffb006a483b3a38777f997b978ff88"}]}