From: sylvain.joyeux@...4x.org Date: 2018-12-19T23:33:05+00:00 Subject: [ruby-core:90623] [Ruby trunk Bug#14542] syswrite spuriously empties the given string Issue #14542 has been updated by sylvain.joyeux (Sylvain Joyeux). Could someone close this report ? It's been solved as 'not a bug in Ruby' ---------------------------------------- Bug #14542: syswrite spuriously empties the given string https://bugs.ruby-lang.org/issues/14542#change-75785 * Author: sylvain.joyeux (Sylvain Joyeux) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.3.6, 2.4.3 * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- I'm doing a bit of buffer management to write on a socket. The main method looks like this: ~~~ ruby @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: ~~~ ruby @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 ;-) -- https://bugs.ruby-lang.org/ Unsubscribe: