nobu / ruby-lang.org wrote: > No. > Your patch releases the GVL while unfreezing the string to be written. > If the write operation is blocked, other threads can clobber that string. It does? fwrite_unfreeze happens in rb_ensure e_proc, which has GVL. From what I can tell, GVL release happens only inside fwrite_freeze (rb_ensure b_proc): fwrite_freeze (rb_ensure b_proc) io_binwrite rb_mutex_synchronize(fptr->write_lock...) rb_mutex_lock = NOGVL io_binwrite_string (identical as below:) io_binwrite_string rb_writev_internal rb_thread_io_blocking_region = NOGVL rb_write_internal rb_thread_io_blocking_region = NOGVL rb_io_wait_writable = NOGVL By the time e_proc (fwrite_unfreeze) is called by rb_ensure we have GVL, again. Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>