Actions
Bug #14542
closedsyswrite spuriously empties the given string
Description
I'm doing a bit of buffer management to write on a socket. The main method looks like this:
@write_buffer.concat(new_bytes) if new_bytes
written_bytes = io.syswrite(@write_buffer)
@write_buffer = @write_buffer[written_bytes..-1]
!@write_buffer.empty?
However, in some cases, I get a nil @write_buffer
. I've added some debugging info:
@write_buffer.concat(new_bytes) if new_bytes
size_before_syswrite = @write_buffer.size
written_bytes = io.syswrite(@write_buffer)
size_after_syswrite = @write_buffer.size
updated_write_buffer = @write_buffer[written_bytes..-1]
if !updated_write_buffer
STDERR.puts "NIL WRITE BUFFER, size_before_syswrite=#{size_before_syswrite} size_after_syswrite=#{size_after_syswrite} written_bytes=#{written_bytes}"
end
@write_buffer = updated_write_buffer
!@write_buffer.empty?
in all cases, I got the following output:
NIL WRITE BUFFER, size_before_syswrite=3106 size_after_syswrite=0 written_bytes=3106
However, I could not reproduce the problem with toy setups. syswrite's string handling is beyond the little I know of MRI's internals ;-)
Actions
Like0
Like0Like0Like0Like0Like0