Skip to content

Commit 790afb3

Browse files
committed
Declare types as RUBY_TYPED_THREAD_SAFE_FREE
Ref: ruby/ruby#17395
1 parent 1316292 commit 790afb3

3 files changed

Lines changed: 9 additions & 5 deletions

File tree

ext/json/ext/generator/generator.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ static const rb_data_type_t JSON_Generator_State_type = {
739739
.dsize = State_memsize,
740740
.dcompact = State_compact,
741741
},
742-
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
742+
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
743743
};
744744

745745
static void state_init(JSON_Generator_State *state)

ext/json/ext/json.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131

3232
/* shims */
3333

34+
#ifndef RUBY_TYPED_THREAD_SAFE_FREE
35+
#define RUBY_TYPED_FREE_IMMEDIATELY
36+
#endif
37+
3438
#ifndef UNDEF_P
3539
#define UNDEF_P(val) (val == Qundef)
3640
#endif

ext/json/ext/parser/parser.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ static const rb_data_type_t JSON_Parser_rvalue_stack_type = {
314314
},
315315
// We deliberately don't declare rvalue_stack as RUBY_TYPED_WB_PROTECTED
316316
// because it churns a lot of values so trigering write barriers every time is very costly.
317-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
317+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
318318
};
319319

320320
static rvalue_stack *rvalue_stack_spill(rvalue_stack *old_stack, VALUE *handle, rvalue_stack **stack_ref)
@@ -511,7 +511,7 @@ static const rb_data_type_t JSON_Parser_frame_stack_type = {
511511
.dfree = json_frame_stack_free,
512512
.dsize = json_frame_stack_memsize,
513513
},
514-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
514+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
515515
};
516516

517517
static json_frame_stack *json_frame_stack_spill(json_frame_stack *old_stack, VALUE *handle, json_frame_stack **stack_ref)
@@ -2180,7 +2180,7 @@ static const rb_data_type_t JSON_ParserConfig_type = {
21802180
.dsize = JSON_ParserConfig_memsize,
21812181
.dcompact = JSON_ParserConfig_compact,
21822182
},
2183-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
2183+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
21842184
};
21852185

21862186
static VALUE cJSON_parser_s_allocate(VALUE klass)
@@ -2265,7 +2265,7 @@ static const rb_data_type_t JSON_ResumableParser_type = {
22652265
// RUBY_TYPED_WB_PROTECTED is deliberately not declared because
22662266
// this is a superset of JSON_Parser_rvalue_stack_type, so we'd need
22672267
// to trigger a lot of write barriers.
2268-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
2268+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
22692269
};
22702270

22712271
static VALUE cResumableParser_allocate(VALUE klass)

0 commit comments

Comments
 (0)