From 97d6e56b0e68d5361809c4571fd1003ee41bffb0 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 28 Feb 2012 09:47:47 +0000 Subject: [PATCH] * io.c (io_binwrite, rb_io_syswrite): use shared frozen source strings. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34847 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 ++++- io.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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"); }