[ruby-core:85762] Re: [Ruby trunk Bug#14542] syswrite spuriously empties the given string

From: Eric Wong <normalperson@...>
Date: 2018-02-22 22:54:08 UTC
List: ruby-core #85762
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next