[tor-commits] [meek/master] Have terminateprocess-buffer wait on either of stdin closing or child exiting.
dcf at torproject.org
dcf at torproject.org
Fri Apr 19 06:27:39 UTC 2019
commit 29797a33ecee1c6fc4882fc2b6beabcd64f554ce
Author: David Fifield <david at bamsoftware.com>
Date: Fri Apr 19 00:01:43 2019 -0600
Have terminateprocess-buffer wait on either of stdin closing or child exiting.
On Windows, I observed once that if meek-client.exe can't be found,
tor.exe and its child process terminateprocess-buffer.exe continued
running. I suspect terminateprocess-buffer was hung up in io.Copy--the
child process stdin pipe was closed, but as it has nothing to copy, it
couldn't detect the fact. Now have it do the stdin copy in a separate
goroutine, and also close the child stdin pipe explicitly.
---
terminateprocess-buffer/terminateprocess-buffer.go | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/terminateprocess-buffer/terminateprocess-buffer.go b/terminateprocess-buffer/terminateprocess-buffer.go
index 85df446..afedc77 100644
--- a/terminateprocess-buffer/terminateprocess-buffer.go
+++ b/terminateprocess-buffer/terminateprocess-buffer.go
@@ -42,7 +42,16 @@ func main() {
if err != nil {
log.Fatal(err)
}
- io.Copy(stdin, os.Stdin)
+ go func() {
+ _, err := io.Copy(stdin, os.Stdin)
+ if err != nil {
+ log.Fatalf("copying stdin: %v", err)
+ }
+ err = stdin.Close()
+ if err != nil {
+ log.Fatalf("closing stdin: %v", err)
+ }
+ }()
err = cmd.Wait()
if err != nil {
log.Fatal(err)
More information about the tor-commits
mailing list