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>
This commit is contained in:
John HawthornandLuke Gruber committed 2026-06-23 13:30:26 -07:00
1 parent 7a40f85f82
commit daffaaee73
39 files changed
+69 -69
Notes: git 2026-06-23 20:30:56 +00:00

No files matched your search

+1 -1
View File
@@ -6920,7 +6920,7 @@ static const rb_data_type_t ary_sample_memo_type = {
.function = {
.dfree = (RUBY_DATA_FUNC)st_free_table,
},
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE
};
static VALUE
+2 -2
View File
@@ -45,7 +45,7 @@ static const rb_data_type_t rb_node_type = {
"AST/node",
{node_gc_mark, RUBY_TYPED_DEFAULT_FREE, node_memsize,},
0, 0,
RUBY_TYPED_FREE_IMMEDIATELY,
RUBY_TYPED_THREAD_SAFE_FREE,
};
struct ASTLocationData {
@@ -70,7 +70,7 @@ static const rb_data_type_t rb_location_type = {
"AST/location",
{location_gc_mark, RUBY_TYPED_DEFAULT_FREE, location_memsize,},
0, 0,
RUBY_TYPED_FREE_IMMEDIATELY,
RUBY_TYPED_THREAD_SAFE_FREE,
};
+1 -1
View File
@@ -339,7 +339,7 @@ static const rb_data_type_t rb_master_box_data_type = {
box_entry_memsize,
rb_box_gc_update_references,
},
&rb_box_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
&rb_box_data_type, 0, RUBY_TYPED_THREAD_SAFE_FREE // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
};
VALUE
+4 -4
View File
@@ -12376,7 +12376,7 @@ static const rb_data_type_t labels_wrapper_type = {
.dmark = (RUBY_DATA_FUNC)rb_mark_set,
.dfree = (RUBY_DATA_FUNC)st_free_table,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
void
@@ -12637,7 +12637,7 @@ static const rb_data_type_t pinned_list_type = {
RUBY_DEFAULT_FREE,
NULL, // No external memory to report,
},
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
static VALUE
@@ -14821,7 +14821,7 @@ ibf_dump_memsize(const void *ptr)
static const rb_data_type_t ibf_dump_type = {
"ibf_dump",
{ibf_dump_mark, ibf_dump_free, ibf_dump_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
static void
@@ -15058,7 +15058,7 @@ ibf_loader_memsize(const void *ptr)
static const rb_data_type_t ibf_load_type = {
"ibf_loader",
{ibf_loader_mark, ibf_loader_free, ibf_loader_memsize,},
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE
};
const rb_iseq_t *
+1 -1
View File
@@ -91,7 +91,7 @@ static const rb_data_type_t concurrent_set_type = {
.dsize = concurrent_set_size,
},
/* Hack: NOT WB_PROTECTED on purpose (see above) */
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
VALUE
+1 -1
View File
@@ -545,7 +545,7 @@ static const rb_data_type_t dir_data_type = {
dir_free,
NULL, // Nothing allocated externally, so don't need a memsize function
},
0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
};
static VALUE dir_close(VALUE);
+1 -1
View File
@@ -123,7 +123,7 @@ static rb_atomic_t locale_alias_registered;
static const rb_data_type_t encoding_data_type = {
"encoding",
{0, 0, 0,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
#define is_encoding_type(obj) (RTYPEDDATA_TYPE(obj) == &encoding_data_type)
+8 -8
View File
@@ -280,7 +280,7 @@ static const rb_data_type_t enumerator_data_type = {
NULL, // Nothing allocated externally, so don't need a memsize function
NULL,
},
0, NULL, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
0, NULL, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
};
static struct enumerator *
@@ -311,7 +311,7 @@ static const rb_data_type_t proc_entry_data_type = {
NULL, // Nothing allocated externally, so don't need a memsize function
proc_entry_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static struct proc_entry *
@@ -1332,7 +1332,7 @@ static const rb_data_type_t yielder_data_type = {
NULL,
yielder_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static struct yielder *
@@ -1456,7 +1456,7 @@ static const rb_data_type_t generator_data_type = {
NULL,
generator_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static struct generator *
@@ -2987,7 +2987,7 @@ static const rb_data_type_t producer_data_type = {
producer_memsize,
producer_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static struct producer *
@@ -3205,7 +3205,7 @@ static const rb_data_type_t enum_chain_data_type = {
enum_chain_memsize,
enum_chain_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static struct enum_chain *
@@ -3520,7 +3520,7 @@ static const rb_data_type_t enum_product_data_type = {
enum_product_memsize,
enum_product_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static struct enum_product *
@@ -3858,7 +3858,7 @@ static const rb_data_type_t arith_seq_data_type = {
NULL,
},
.parent = &enumerator_data_type,
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
};
static VALUE
+1 -1
View File
@@ -2533,7 +2533,7 @@ static const rb_data_type_t name_err_mesg_data_type = {
NULL, // No external memory to report,
name_err_mesg_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
/* :nodoc: */
+1 -1
View File
@@ -1291,7 +1291,7 @@ addrinfo_memsize(const void *ptr)
static const rb_data_type_t addrinfo_type = {
"socket/addrinfo",
{addrinfo_mark, addrinfo_free, addrinfo_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED,
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED,
};
static VALUE
+1 -1
View File
@@ -548,7 +548,7 @@ static const rb_data_type_t stat_data_type = {
RUBY_TYPED_DEFAULT_FREE,
NULL, // No external memory to report
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
struct rb_stat {
+1 -1
View File
@@ -6941,7 +6941,7 @@ static const rb_data_type_t env_data_type = {
NULL,
NULL,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
/*
+2 -2
View File
@@ -349,7 +349,7 @@ const rb_data_type_t rb_managed_id_table_type = {
.dfree = managed_id_table_free,
.dsize = managed_id_table_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 inline struct rb_id_table *
@@ -478,7 +478,7 @@ const rb_data_type_t rb_marked_id_table_type = {
.dcompact = marked_id_table_compact,
},
.parent = &rb_managed_id_table_type,
.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,
};
VALUE
+1 -1
View File
@@ -10036,7 +10036,7 @@ argf_memsize(const void *ptr)
static const rb_data_type_t argf_type = {
"ARGF",
{argf_mark_and_move, RUBY_TYPED_DEFAULT_FREE, argf_memsize, argf_mark_and_move},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static inline void
+1 -1
View File
@@ -332,7 +332,7 @@ static const rb_data_type_t rb_io_buffer_type = {
.dcompact = rb_io_buffer_type_compact,
},
.data = NULL,
.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 struct rb_io_buffer *
+3 -3
View File
@@ -1607,7 +1607,7 @@ static const rb_data_type_t iseqw_data_type = {
iseqw_memsize,
iseqw_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE|RUBY_TYPED_WB_PROTECTED
};
static VALUE
@@ -2863,7 +2863,7 @@ iseq_inspect(const rb_iseq_t *iseq)
static const rb_data_type_t tmp_set = {
"tmpset",
{(void (*)(void *))rb_mark_set, (void (*)(void *))st_free_table, 0, 0,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
static VALUE
@@ -3347,7 +3347,7 @@ cdhash_each(VALUE key, VALUE value, VALUE ary)
static const rb_data_type_t label_wrapper = {
"label_wrapper",
{(void (*)(void *))rb_mark_tbl, (void (*)(void *))st_free_table, 0, 0,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
#define DECL_ID(name) \
+3 -3
View File
@@ -237,7 +237,7 @@ memsize_dump_arg(const void *ptr)
static const rb_data_type_t dump_arg_data = {
"dump_arg",
{mark_dump_arg, free_dump_arg, memsize_dump_arg,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
static VALUE
@@ -1301,7 +1301,7 @@ memsize_load_arg(const void *ptr)
static const rb_data_type_t load_arg_data = {
"load_arg",
{mark_load_arg, free_load_arg, memsize_load_arg,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
#define r_entry(v, arg) r_entry0((v), (arg)->data->num_entries, (arg))
@@ -2638,7 +2638,7 @@ static const rb_data_type_t marshal_compat_type = {
.dsize = marshal_compat_table_memsize,
.dcompact = marshal_compat_table_mark_and_move,
},
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY,
.flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE,
};
static st_table *
+1 -1
View File
@@ -125,7 +125,7 @@ static const rb_data_type_t memory_view_entry_data_type = {
0,
0,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
/* Register memory view functions for the given class */
+3 -3
View File
@@ -106,7 +106,7 @@ const rb_data_type_t ruby_proc_data_type = {
proc_memsize,
proc_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
#define proc_data_type ruby_proc_data_type
@@ -285,7 +285,7 @@ const rb_data_type_t ruby_binding_data_type = {
binding_memsize,
binding_mark_and_move,
},
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE
};
VALUE
@@ -1812,7 +1812,7 @@ static const rb_data_type_t method_data_type = {
NULL, // No external memory to report,
bm_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_FROZEN_SHAREABLE_NO_REC
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_FROZEN_SHAREABLE_NO_REC
};
VALUE
+2 -2
View File
@@ -597,7 +597,7 @@ static const rb_data_type_t rb_process_status_type = {
.dfree = RUBY_DEFAULT_FREE,
.dsize = NULL,
},
.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 VALUE
@@ -1740,7 +1740,7 @@ memsize_exec_arg(const void *ptr)
static const rb_data_type_t exec_arg_data_type = {
"exec_arg",
{mark_exec_arg, RUBY_TYPED_DEFAULT_FREE, memsize_exec_arg},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE
};
#ifdef _WIN32
+1 -1
View File
@@ -2472,7 +2472,7 @@ static const rb_data_type_t cross_ractor_require_data_type = {
NULL, // memsize
NULL, // compact
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
};
static VALUE
+2 -2
View File
@@ -36,7 +36,7 @@ static const rb_data_type_t ractor_port_data_type = {
NULL, // memsize
NULL, // update
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
};
static st_data_t
@@ -1255,7 +1255,7 @@ static const rb_data_type_t ractor_selector_data_type = {
ractor_selector_memsize,
NULL, // update
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
static struct ractor_selector *
+2 -2
View File
@@ -272,7 +272,7 @@ const rb_data_type_t rb_random_data_type = {
random_free,
random_memsize,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
#define random_mt_mark rb_random_mark
@@ -293,7 +293,7 @@ static const rb_data_type_t random_mt_type = {
},
&rb_random_data_type,
(void *)&random_mt_if,
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static rb_random_t *
+2 -2
View File
@@ -508,7 +508,7 @@ static const rb_data_type_t ruby_parser_data_type = {
parser_free,
parser_memsize,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
#ifdef UNIVERSAL_PARSER
@@ -736,7 +736,7 @@ static const rb_data_type_t ast_data_type = {
ast_free,
NULL, // No dsize() because this object does not appear in ObjectSpace.
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
static VALUE
+1 -1
View File
@@ -90,7 +90,7 @@ static const rb_data_type_t blocking_operation_data_type = {
RUBY_DEFAULT_FREE,
blocking_operation_memsize,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
/*
+1 -1
View File
@@ -201,7 +201,7 @@ static const rb_data_type_t set_data_type = {
.dsize = set_size,
.dcompact = set_update_references,
},
.flags = RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE
.flags = RUBY_TYPED_EMBEDDABLE | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE
};
static inline set_table *
+1 -1
View File
@@ -365,7 +365,7 @@ static const rb_data_type_t shape_tree_type = {
.dsize = shape_tree_memsize,
.dcompact = shape_tree_mark_and_move,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
+1 -1
View File
@@ -7883,7 +7883,7 @@ mapping_buffer_free(void *p)
static const rb_data_type_t mapping_buffer_type = {
"mapping_buffer",
{0, mapping_buffer_free,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static VALUE
+1 -1
View File
@@ -209,7 +209,7 @@ static const rb_data_type_t sym_id_entry_list_type = {
sym_id_entry_list_memsize,
sym_id_entry_list_compact,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
static int
+2 -2
View File
@@ -5081,7 +5081,7 @@ static const rb_data_type_t thgroup_data_type = {
RUBY_TYPED_DEFAULT_FREE,
NULL, // No external memory to report
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
/*
@@ -5250,7 +5250,7 @@ thread_shield_mark(void *ptr)
static const rb_data_type_t thread_shield_data_type = {
"thread_shield",
{thread_shield_mark, 0, 0,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
static VALUE
+3 -3
View File
@@ -728,7 +728,7 @@ static const rb_data_type_t queue_data_type = {
.dsize = queue_memsize,
.dcompact = queue_mark_and_move,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
static VALUE
@@ -834,7 +834,7 @@ static const rb_data_type_t szqueue_data_type = {
.dcompact = szqueue_mark_and_move,
},
.parent = &queue_data_type,
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED,
};
static VALUE
@@ -1174,7 +1174,7 @@ condvar_memsize(const void *ptr)
static const rb_data_type_t cv_data_type = {
"condvar",
{0, RUBY_TYPED_DEFAULT_FREE, condvar_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE|RUBY_TYPED_WB_PROTECTED
};
static struct rb_condvar *
+1 -1
View File
@@ -1909,7 +1909,7 @@ static const rb_data_type_t time_data_type = {
.dsize = NULL,
.dcompact = time_mark_and_move,
},
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
.flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
};
static VALUE
+1 -1
View File
@@ -3019,7 +3019,7 @@ econv_memsize(const void *ptr)
static const rb_data_type_t econv_data_type = {
"econv",
{0, econv_free, econv_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
static VALUE
+1 -1
View File
@@ -2676,7 +2676,7 @@ autoload_table_compact(void *ptr)
static const rb_data_type_t autoload_table_type = {
"autoload_table",
{autoload_table_mark, autoload_table_free, autoload_table_memsize, autoload_table_compact,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
#define check_autoload_table(av) \
+3 -3
View File
@@ -3561,7 +3561,7 @@ vm_memsize(const void *ptr)
const rb_data_type_t ruby_vm_data_type = {
"VM",
{0, 0, vm_memsize,},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
#define vm_data_type ruby_vm_data_type
@@ -3924,7 +3924,7 @@ const rb_data_type_t ruby_threadptr_data_type = {
thread_memsize,
thread_compact,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
0, 0, RUBY_TYPED_THREAD_SAFE_FREE
};
VALUE
@@ -4751,7 +4751,7 @@ static const rb_data_type_t pin_array_list_type = {
.dsize = pin_array_list_memsize,
.dcompact = pin_array_list_update_references,
},
.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 VALUE
+2 -2
View File
@@ -158,7 +158,7 @@ static const rb_data_type_t location_data_type = {
NULL, // No external memory to report,
location_ref_update,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
int
@@ -568,7 +568,7 @@ static const rb_data_type_t backtrace_data_type = {
/* Cannot set the RUBY_TYPED_EMBEDDABLE flag because the loc of frame_info
* points elements in the backtrace array. This can cause the loc to become
* incorrect if this backtrace object is moved by compaction. */
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED
};
int
+2 -2
View File
@@ -135,7 +135,7 @@ static const rb_data_type_t cc_table_type = {
.dcompact = vm_cc_table_compact,
},
.parent = &rb_managed_id_table_type,
.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,
};
VALUE
@@ -798,7 +798,7 @@ static const rb_data_type_t cc_refinement_set_type = {
cc_refinement_set_compact,
cc_refinement_set_handle_weak_references,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
VALUE
+1 -1
View File
@@ -906,7 +906,7 @@ static const rb_data_type_t tp_data_type = {
NULL, // Nothing allocated externally, so don't need a memsize function
tp_mark_and_move,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static VALUE
+2 -2
View File
@@ -141,7 +141,7 @@ const rb_data_type_t rb_weakmap_type = {
wmap_compact,
wmap_handle_weak_references,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static int
@@ -627,7 +627,7 @@ static const rb_data_type_t rb_weakkeymap_type = {
wkmap_compact,
wkmap_handle_weak_references,
},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
0, 0, RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static int