Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ext/json/ext/generator/generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ static const rb_data_type_t JSON_Generator_State_type = {
.dsize = State_memsize,
.dcompact = State_compact,
},
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
};

static void state_init(JSON_Generator_State *state)
Expand Down
4 changes: 4 additions & 0 deletions ext/json/ext/json.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@

/* shims */

#ifndef RUBY_TYPED_THREAD_SAFE_FREE
#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
#endif

#ifndef UNDEF_P
#define UNDEF_P(val) (val == Qundef)
#endif
Expand Down
8 changes: 4 additions & 4 deletions ext/json/ext/parser/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ static const rb_data_type_t JSON_Parser_rvalue_stack_type = {
},
// We deliberately don't declare rvalue_stack as RUBY_TYPED_WB_PROTECTED
// because it churns a lot of values so trigering write barriers every time is very costly.
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
};

static rvalue_stack *rvalue_stack_spill(rvalue_stack *old_stack, VALUE *handle, rvalue_stack **stack_ref)
Expand Down Expand Up @@ -511,7 +511,7 @@ static const rb_data_type_t JSON_Parser_frame_stack_type = {
.dfree = json_frame_stack_free,
.dsize = json_frame_stack_memsize,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
};

static json_frame_stack *json_frame_stack_spill(json_frame_stack *old_stack, VALUE *handle, json_frame_stack **stack_ref)
Expand Down Expand Up @@ -2180,7 +2180,7 @@ static const rb_data_type_t JSON_ParserConfig_type = {
.dsize = JSON_ParserConfig_memsize,
.dcompact = JSON_ParserConfig_compact,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
};

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

static VALUE cResumableParser_allocate(VALUE klass)
Expand Down
Loading