From: Eric Wong Date: 2018-02-22T22:54:08+00:00 Subject: [ruby-core:85762] Re: [Ruby trunk Bug#14542] syswrite spuriously empties the given string sylvain.joyeux@m4x.org wrote: > https://bugs.ruby-lang.org/issues/14542 > > * Target version: > * ruby -v: 2.3.6, 2.4.3 Hitting this in 2.4.3 might be my fault, but I'm not sure about Ruby 2.3.6 since my garbage reduction fixes aren't in that. For 2.4.3, can you try removing the rb_str_tmp_frozen_release call in the rb_io_syswrite function in io.c? > 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? > ~~~ Just to cover all bases, are you somehow sharing @write_buffer between multiple threads? Or do you have any signal handler where @write_buffer may be clobbered? I'll try to be around this weekend to do some deeper investigation. Unsubscribe: