Skip to content

Commit 1e84982

Browse files
committed
Integrate imemo_subclasses work to parallel sweep
1 parent 7b52cbb commit 1e84982

2 files changed

Lines changed: 8 additions & 17 deletions

File tree

gc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1367,14 +1367,15 @@ rb_gc_imemo_needs_cleanup_p(VALUE obj)
13671367
case imemo_ment:
13681368
case imemo_iseq:
13691369
case imemo_callinfo:
1370-
case imemo_subclasses:
13711370
return true;
13721371

13731372
case imemo_tmpbuf:
13741373
return ((rb_imemo_tmpbuf_t *)obj)->ptr != NULL;
13751374

13761375
case imemo_fields:
13771376
return FL_TEST_RAW(obj, OBJ_FIELD_HEAP) || (id2ref_tbl && rb_obj_shape_has_id(obj));
1377+
case imemo_subclasses:
1378+
return FL_TEST_RAW(obj, IMEMO_SUBCLASSES_HEAP);
13781379
}
13791380
UNREACHABLE_RETURN(true);
13801381
}

gc/default/default.c

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4545,6 +4545,8 @@ gc_pre_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *p
45454545
case imemo_throw_data:
45464546
case imemo_tmpbuf:
45474547
case imemo_fields:
4548+
case imemo_cvar_entry:
4549+
case imemo_subclasses:
45484550
goto free;
45494551
case imemo_callinfo:
45504552
case imemo_iseq: // calls rb_yjit_iseq_free which is not concurrency safe
@@ -4569,24 +4571,12 @@ gc_pre_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *p
45694571
case T_STRUCT:
45704572
case T_MATCH:
45714573
case T_REGEXP:
4572-
case T_FILE: {
4573-
debug_free_check(objspace, vp);
4574-
goto free;
4575-
}
4574+
case T_FILE:
45764575
case T_CLASS:
45774576
case T_MODULE:
4578-
case T_ICLASS:
4579-
debug_free_check(objspace, vp);
4580-
if (!rb_gc_obj_needs_cleanup_p(vp)) {
4581-
heap_page_add_freeobj(objspace, page, vp, true);
4582-
psweep_debug(2, "[sweep] freed: page(%p), obj(%p)\n", (void*)page, (void*)vp);
4583-
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)vp, page->slot_size);
4584-
freed++;
4585-
}
4586-
else {
4587-
sweep_in_ruby_thread(objspace, page, vp);
4588-
}
4589-
break;
4577+
case T_ICLASS: {
4578+
goto free;
4579+
}
45904580
free: {
45914581
debug_free_check(objspace, vp);
45924582
if (!rb_gc_obj_needs_cleanup_p(vp)) {

0 commit comments

Comments
 (0)