From 2956573b09ec78d7735a07fe3d7b2dcc907879fb Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sat, 14 Jun 2025 13:49:28 +0200 Subject: Add test for `IO::Buffer.for(frozen_string) {}` and omit rb_str_{,un}locktmp in that case --- io_buffer.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'io_buffer.c') diff --git a/io_buffer.c b/io_buffer.c index 40c12ef5c1..190b67d8ac 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -496,7 +496,9 @@ io_buffer_for_yield_instance(VALUE _arguments) arguments->instance = io_buffer_for_make_instance(arguments->klass, arguments->string, arguments->flags); - rb_str_locktmp(arguments->string); + if (!RB_OBJ_FROZEN(arguments->string)) { + rb_str_locktmp(arguments->string); + } return rb_yield(arguments->instance); } @@ -510,7 +512,9 @@ io_buffer_for_yield_instance_ensure(VALUE _arguments) rb_io_buffer_free(arguments->instance); } - rb_str_unlocktmp(arguments->string); + if (!RB_OBJ_FROZEN(arguments->string)) { + rb_str_unlocktmp(arguments->string); + } return Qnil; } -- cgit v1.2.3