From 3e45cdb526a4536cbaf0deb7c0489f4eeb4794c1 Mon Sep 17 00:00:00 2001 From: Juan Wajnerman Date: Thu, 1 Aug 2019 17:42:17 -0300 Subject: [PATCH] Fix race condition on Process when more than one IO is specified --- src/process.cr | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/process.cr b/src/process.cr index d181a0a51d3e..208c6c253ae1 100644 --- a/src/process.cr +++ b/src/process.cr @@ -301,11 +301,13 @@ class Process fork_io, process_io = IO.pipe(read_blocking: true) @wait_count += 1 + ensure_channel spawn { copy_io(stdio, process_io, channel, close_dst: true) } else process_io, fork_io = IO.pipe(write_blocking: true) @wait_count += 1 + ensure_channel spawn { copy_io(process_io, stdio, channel, close_src: true) } end @@ -405,6 +407,14 @@ class Process end private def channel + if channel = @channel + channel + else + raise "BUG: Notification channel was not initialized for this process" + end + end + + private def ensure_channel @channel ||= Channel(Exception?).new end