Skip to content

Commit daffaae

Browse files
Mark most TypedData types as THREAD_SAFE_FREE
Set RUBY_TYPED_THREAD_SAFE_FREE on TypedData types whose dfree function is trivially safe, and only frees its own memory Types not yet marked as THREAD_SAFE_FREE: - id2ref_tbl_type: sets the process-global id2ref_tbl to NULL. - mutex_data_type: unlinks itself from another thread's keeping_mutexes list. - autoload_data_type: deletes nodes from a shared intrusive list. - autoload_const_type: deletes itself from a shared list. - rb_cont_data_type: mutates the shared fiber pool and the global first_jit_cont list. - rb_fiber_data_type: delegates to cont_free. - FiberPoolDataType: mutates shared fiber pool free-lists. - ractor_data_type: reconfigures global VM event-hook flags and call caches. - exported_object_registry: frees a global table under the VM lock. - rb_box_data_type (Box::Entry): unlinks classext from other live class and module objects. - box_ext_cleanup_type: dereferences another String object and calls unlink. - monitor_data_type: uses the default free, so the flag has no effect. Co-authored-by: Luke Gruber <luke.gruber@shopify.com>
1 parent 7a40f85 commit daffaae

39 files changed

Lines changed: 69 additions & 69 deletions

array.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6920,7 +6920,7 @@ static const rb_data_type_t ary_sample_memo_type = {
69206920
.function = {
69216921
.dfree = (RUBY_DATA_FUNC)st_free_table,
69226922
},
6923-
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
6923+
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE
69246924
};
69256925

69266926
static VALUE

ast.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static const rb_data_type_t rb_node_type = {
4545
"AST/node",
4646
{node_gc_mark, RUBY_TYPED_DEFAULT_FREE, node_memsize,},
4747
0, 0,
48-
RUBY_TYPED_FREE_IMMEDIATELY,
48+
RUBY_TYPED_THREAD_SAFE_FREE,
4949
};
5050

5151
struct ASTLocationData {
@@ -70,7 +70,7 @@ static const rb_data_type_t rb_location_type = {
7070
"AST/location",
7171
{location_gc_mark, RUBY_TYPED_DEFAULT_FREE, location_memsize,},
7272
0, 0,
73-
RUBY_TYPED_FREE_IMMEDIATELY,
73+
RUBY_TYPED_THREAD_SAFE_FREE,
7474
};
7575

7676

box.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ static const rb_data_type_t rb_master_box_data_type = {
339339
box_entry_memsize,
340340
rb_box_gc_update_references,
341341
},
342-
&rb_box_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
342+
&rb_box_data_type, 0, RUBY_TYPED_THREAD_SAFE_FREE // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
343343
};
344344

345345
VALUE

compile.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12376,7 +12376,7 @@ static const rb_data_type_t labels_wrapper_type = {
1237612376
.dmark = (RUBY_DATA_FUNC)rb_mark_set,
1237712377
.dfree = (RUBY_DATA_FUNC)st_free_table,
1237812378
},
12379-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
12379+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
1238012380
};
1238112381

1238212382
void
@@ -12637,7 +12637,7 @@ static const rb_data_type_t pinned_list_type = {
1263712637
RUBY_DEFAULT_FREE,
1263812638
NULL, // No external memory to report,
1263912639
},
12640-
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
12640+
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
1264112641
};
1264212642

1264312643
static VALUE
@@ -14821,7 +14821,7 @@ ibf_dump_memsize(const void *ptr)
1482114821
static const rb_data_type_t ibf_dump_type = {
1482214822
"ibf_dump",
1482314823
{ibf_dump_mark, ibf_dump_free, ibf_dump_memsize,},
14824-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
14824+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
1482514825
};
1482614826

1482714827
static void
@@ -15058,7 +15058,7 @@ ibf_loader_memsize(const void *ptr)
1505815058
static const rb_data_type_t ibf_load_type = {
1505915059
"ibf_loader",
1506015060
{ibf_loader_mark, ibf_loader_free, ibf_loader_memsize,},
15061-
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
15061+
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE
1506215062
};
1506315063

1506415064
const rb_iseq_t *

concurrent_set.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ static const rb_data_type_t concurrent_set_type = {
9191
.dsize = concurrent_set_size,
9292
},
9393
/* Hack: NOT WB_PROTECTED on purpose (see above) */
94-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
94+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
9595
};
9696

9797
VALUE

dir.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ static const rb_data_type_t dir_data_type = {
545545
dir_free,
546546
NULL, // Nothing allocated externally, so don't need a memsize function
547547
},
548-
0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
548+
0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
549549
};
550550

551551
static VALUE dir_close(VALUE);

encoding.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static rb_atomic_t locale_alias_registered;
123123
static const rb_data_type_t encoding_data_type = {
124124
"encoding",
125125
{0, 0, 0,},
126-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
126+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
127127
};
128128

129129
#define is_encoding_type(obj) (RTYPEDDATA_TYPE(obj) == &encoding_data_type)

enumerator.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ static const rb_data_type_t enumerator_data_type = {
280280
NULL, // Nothing allocated externally, so don't need a memsize function
281281
NULL,
282282
},
283-
0, NULL, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
283+
0, NULL, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
284284
};
285285

286286
static struct enumerator *
@@ -311,7 +311,7 @@ static const rb_data_type_t proc_entry_data_type = {
311311
NULL, // Nothing allocated externally, so don't need a memsize function
312312
proc_entry_mark_and_move,
313313
},
314-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
314+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
315315
};
316316

317317
static struct proc_entry *
@@ -1332,7 +1332,7 @@ static const rb_data_type_t yielder_data_type = {
13321332
NULL,
13331333
yielder_mark_and_move,
13341334
},
1335-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
1335+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
13361336
};
13371337

13381338
static struct yielder *
@@ -1456,7 +1456,7 @@ static const rb_data_type_t generator_data_type = {
14561456
NULL,
14571457
generator_mark_and_move,
14581458
},
1459-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
1459+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
14601460
};
14611461

14621462
static struct generator *
@@ -2987,7 +2987,7 @@ static const rb_data_type_t producer_data_type = {
29872987
producer_memsize,
29882988
producer_mark_and_move,
29892989
},
2990-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
2990+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
29912991
};
29922992

29932993
static struct producer *
@@ -3205,7 +3205,7 @@ static const rb_data_type_t enum_chain_data_type = {
32053205
enum_chain_memsize,
32063206
enum_chain_mark_and_move,
32073207
},
3208-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
3208+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
32093209
};
32103210

32113211
static struct enum_chain *
@@ -3520,7 +3520,7 @@ static const rb_data_type_t enum_product_data_type = {
35203520
enum_product_memsize,
35213521
enum_product_mark_and_move,
35223522
},
3523-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
3523+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
35243524
};
35253525

35263526
static struct enum_product *
@@ -3858,7 +3858,7 @@ static const rb_data_type_t arith_seq_data_type = {
38583858
NULL,
38593859
},
38603860
.parent = &enumerator_data_type,
3861-
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
3861+
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
38623862
};
38633863

38643864
static VALUE

error.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2533,7 +2533,7 @@ static const rb_data_type_t name_err_mesg_data_type = {
25332533
NULL, // No external memory to report,
25342534
name_err_mesg_mark_and_move,
25352535
},
2536-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
2536+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
25372537
};
25382538

25392539
/* :nodoc: */

ext/socket/raddrinfo.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,7 @@ addrinfo_memsize(const void *ptr)
12911291
static const rb_data_type_t addrinfo_type = {
12921292
"socket/addrinfo",
12931293
{addrinfo_mark, addrinfo_free, addrinfo_memsize,},
1294-
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED,
1294+
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED,
12951295
};
12961296

12971297
static VALUE

0 commit comments

Comments
 (0)