summaryrefslogtreecommitdiff
path: root/io_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'io_buffer.c')
-rw-r--r--io_buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/io_buffer.c b/io_buffer.c
index a97c687239..d2a12b98fb 100644
--- a/io_buffer.c
+++ b/io_buffer.c
@@ -279,7 +279,12 @@ rb_io_buffer_type_for(VALUE klass, VALUE string)
rb_str_locktmp(string);
- io_buffer_initialize(data, RSTRING_PTR(string), RSTRING_LEN(string), RB_IO_BUFFER_EXTERNAL, string);
+ enum rb_io_buffer_flags flags = RB_IO_BUFFER_EXTERNAL;
+
+ if (RB_OBJ_FROZEN(string))
+ flags |= RB_IO_BUFFER_IMMUTABLE;
+
+ io_buffer_initialize(data, RSTRING_PTR(string), RSTRING_LEN(string), flags, string);
return instance;
}