Skip to content

Commit a82593c

Browse files
committed
Fix compatibility with TruffleRuby
The behavior of `IO#read_nonblock` differs sligthly. See: ruby/spec#1145
1 parent 8c1c68b commit a82593c

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

lib/redis_client/ruby_connection/buffered_io.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ class BufferedIO
1010

1111
attr_accessor :read_timeout, :write_timeout
1212

13-
def initialize(io, read_timeout:, write_timeout:, chunk_size: 4096)
13+
def initialize(io, read_timeout:, write_timeout:, chunk_size: 4096, encoding: Encoding.default_external)
1414
@io = io
15-
@buffer = "".dup.force_encoding(Encoding.default_external)
15+
@encoding = encoding
16+
@buffer = "".dup.force_encoding(@encoding)
1617
@offset = 0
1718
@chunk_size = chunk_size
1819
@read_timeout = read_timeout
@@ -147,6 +148,9 @@ def ensure_remaining(bytes)
147148
end
148149
end
149150

151+
RESET_BUFFER_ENCODING = RUBY_ENGINE == "truffleruby"
152+
private_constant :RESET_BUFFER_ENCODING
153+
150154
def fill_buffer(strict, size = @chunk_size)
151155
remaining = size
152156
start = @offset - @buffer.bytesize
@@ -171,8 +175,9 @@ def fill_buffer(strict, size = @chunk_size)
171175
if empty_buffer
172176
@offset = start
173177
empty_buffer = false
178+
@buffer.force_encoding(@encoding) if RESET_BUFFER_ENCODING
174179
else
175-
@buffer << bytes
180+
@buffer << bytes.force_encoding(@encoding)
176181
end
177182
remaining -= bytes.bytesize
178183
return if !strict || remaining <= 0

0 commit comments

Comments
 (0)