Skip to content

Commit 78ea480

Browse files
Log frozen read buffer.
1 parent dd1bd32 commit 78ea480

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

lib/io/stream/readable.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@ def read_until(pattern, offset = 0, limit: nil, chomp: true)
191191
matched = @read_buffer.byteslice(0, index+(chomp ? 0 : pattern.bytesize))
192192
@read_buffer = @read_buffer.byteslice(index+pattern.bytesize, @read_buffer.bytesize)
193193

194+
if @read_buffer.frozen?
195+
Console.warn(self, "Read buffer is frozen, duplicating it!", name: "read_until")
196+
@read_buffer = @read_buffer.dup
197+
end
198+
194199
return matched
195200
end
196201
end
@@ -213,6 +218,11 @@ def discard_until(pattern, offset = 0, limit: nil)
213218
matched = @read_buffer.byteslice(0, index+pattern.bytesize)
214219
@read_buffer = @read_buffer.byteslice(index+pattern.bytesize, @read_buffer.bytesize)
215220

221+
if @read_buffer.frozen?
222+
Console.warn(self, "Read buffer is frozen, duplicating it!", name: "discard_until")
223+
@read_buffer = @read_buffer.dup
224+
end
225+
216226
return matched
217227
end
218228
end
@@ -280,6 +290,11 @@ def gets(separator = $/, limit = nil, chomp: false)
280290
line = @read_buffer.byteslice(0, index+(chomp ? 0 : separator.bytesize))
281291
@read_buffer = @read_buffer.byteslice(index+separator.bytesize, @read_buffer.bytesize)
282292

293+
if @read_buffer.frozen?
294+
Console.warn(self, "Read buffer is frozen, duplicating it!", name: "gets")
295+
@read_buffer = @read_buffer.dup
296+
end
297+
283298
return line
284299
end
285300

@@ -343,6 +358,11 @@ def fill_read_buffer(size = @minimum_read_size)
343358
# This effectively ties the input and output stream together.
344359
flush
345360

361+
if @read_buffer.frozen?
362+
Console.warn(self, "Read buffer is frozen, duplicating it!", name: "fill_read_buffer")
363+
@read_buffer = @read_buffer.dup
364+
end
365+
346366
if @read_buffer.empty?
347367
if sysread(size, @read_buffer)
348368
# Console.info(self, name: "read") {@read_buffer.inspect}
@@ -401,7 +421,13 @@ def consume_read_buffer(size = nil, buffer = nil)
401421
else
402422
result = @read_buffer.byteslice(0, size)
403423
end
424+
404425
@read_buffer = @read_buffer.byteslice(size, @read_buffer.bytesize)
426+
427+
if @read_buffer.frozen?
428+
Console.warn(self, "Read buffer is frozen, duplicating it!", name: "consume_read_buffer")
429+
@read_buffer = @read_buffer.dup
430+
end
405431
end
406432

407433
return result

0 commit comments

Comments
 (0)