diff --git a/ChangeLog b/ChangeLog index 832e53d2d9..ba736b44a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ -Tue Feb 28 18:33:30 2012 Nobuyoshi Nakada +Tue Feb 28 18:47:44 2012 Nobuyoshi Nakada + + * io.c (io_binwrite, rb_io_syswrite): use shared frozen source + strings. * io.c (io_fread, io_getpartial, rb_io_sysread): set buffer size after check if readable, which can cause thread switch. diff --git a/io.c b/io.c index 15b714560e..5d49f7f9f0 100644 --- a/io.c +++ b/io.c @@ -1243,6 +1243,8 @@ io_write(VALUE io, VALUE str, int nosync) io = tmp; if (RSTRING_LEN(str) == 0) return INT2FIX(0); + str = rb_str_new_frozen(str); + GetOpenFile(io, fptr); rb_io_check_writable(fptr); @@ -4219,6 +4221,8 @@ rb_io_syswrite(VALUE io, VALUE str) GetOpenFile(io, fptr); rb_io_check_writable(fptr); + str = rb_str_new_frozen(str); + if (fptr->wbuf.len) { rb_warn("syswrite for buffered IO"); }