From 102c2ba65f1fa2a6cdbaaa7d2b466aabfc50e5d7 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Wed, 14 Oct 2020 02:10:54 +0900 Subject: [PATCH] freeze Encoding objects Encoding objects can be accessed in multi-ractors and there is no state to mutate. So we can mark it as frozen and shareable. [Bug #17188] --- encoding.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/encoding.c b/encoding.c index 20bc257d4a..7f0ea73ad1 100644 --- a/encoding.c +++ b/encoding.c @@ -122,7 +122,10 @@ rb_data_is_encoding(VALUE obj) static VALUE enc_new(rb_encoding *encoding) { - return TypedData_Wrap_Struct(rb_cEncoding, &encoding_data_type, (void *)encoding); + VALUE enc = TypedData_Wrap_Struct(rb_cEncoding, &encoding_data_type, (void *)encoding); + rb_obj_freeze(enc); + FL_SET_RAW(enc, RUBY_FL_SHAREABLE); + return enc; } static void