Skip to content

Commit c3ae962

Browse files
committed
Turn on concurrent set deletions in sweep thread
1 parent 8f1db03 commit c3ae962

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

gc.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2298,10 +2298,6 @@ bool
22982298
rb_gc_obj_has_blacklisted_vm_weak_references(VALUE obj)
22992299
{
23002300
switch (BUILTIN_TYPE(obj)) {
2301-
case T_STRING:
2302-
return FL_TEST_RAW(obj, RSTRING_FSTR);
2303-
case T_SYMBOL:
2304-
return true;
23052301
case T_IMEMO:
23062302
switch (imemo_type(obj)) {
23072303
case imemo_callcache: {
@@ -2329,6 +2325,18 @@ rb_gc_obj_free_whitelisted_vm_weak_references_in_sweep_thread(VALUE obj)
23292325
bool freed_generic = rb_free_generic_ivar(obj);
23302326
if (!freed_generic) result = false;
23312327
}
2328+
switch (BUILTIN_TYPE(obj)) {
2329+
case T_STRING:
2330+
if (FL_TEST_RAW(obj, RSTRING_FSTR)) {
2331+
rb_gc_free_fstring(obj);
2332+
}
2333+
break;
2334+
case T_SYMBOL:
2335+
rb_gc_free_dsymbol(obj);
2336+
break;
2337+
default:
2338+
break;
2339+
}
23322340
return result;
23332341
}
23342342

gc/default/default.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4446,6 +4446,7 @@ gc_pre_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *p
44464446
case T_BIGNUM:
44474447
case T_OBJECT:
44484448
case T_STRING:
4449+
case T_SYMBOL:
44494450
case T_ARRAY:
44504451
case T_HASH:
44514452
case T_STRUCT:
@@ -4461,7 +4462,7 @@ gc_pre_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *p
44614462
}
44624463
break;
44634464
}
4464-
default: // ex: T_CLASS/T_MODULE/T_ICLASS/T_SYMBOL
4465+
default: // ex: T_CLASS/T_MODULE/T_ICLASS
44654466
if (!rb_gc_obj_needs_cleanup_p(vp)) {
44664467
heap_page_add_deferred_freeobj(objspace, page, vp);
44674468
psweep_debug(2, "[sweep] freed: page(%p), obj(%p)\n", (void*)page, (void*)vp);

0 commit comments

Comments
 (0)