From 0eb76f29aab2360de6513b9217705edbf73db636 Mon Sep 17 00:00:00 2001 From: Maruth Goyal Date: Wed, 11 Oct 2023 13:26:02 -0700 Subject: [PATCH] fix race condition --- lib/async/io/stream.rb | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/lib/async/io/stream.rb b/lib/async/io/stream.rb index 914e709..a1a2db2 100644 --- a/lib/async/io/stream.rb +++ b/lib/async/io/stream.rb @@ -46,9 +46,6 @@ def initialize(io, block_size: BLOCK_SIZE, maximum_read_size: MAXIMUM_READ_SIZE, @read_buffer = Buffer.new @write_buffer = Buffer.new @drain_buffer = Buffer.new - - # Used as destination buffer for underlying reads. - @input_buffer = Buffer.new end attr :io @@ -244,18 +241,13 @@ def fill_read_buffer(size = @block_size) # This effectively ties the input and output stream together. flush - if @read_buffer.empty? - if @io.read_nonblock(size, @read_buffer, exception: false) - # Console.logger.debug(self, name: "read") {@read_buffer.inspect} - return true - end - else - if chunk = @io.read_nonblock(size, @input_buffer, exception: false) - @read_buffer << chunk - # Console.logger.debug(self, name: "read") {@read_buffer.inspect} + input_buffer = Buffer.new + + if chunk = @io.read_nonblock(size, input_buffer, exception: false) + @read_buffer << chunk + # Console.logger.debug(self, name: "read") {@read_buffer.inspect} - return true - end + return true end # else for both cases above: