Skip to content

Commit 3ec9baf

Browse files
eightbitraptormatzbot
authored andcommitted
[ruby/mmtk] Flush obj_free buffers before shutdown finalizers
shutdown_call_finalizer reads candidates from the Rust-side WeakProcessor, but the main ractor's C-side buffer may not have been flushed yet (ractor_cache_free runs later). Flush all remaining buffers before reading candidates. ruby/mmtk@7e01232134
1 parent 0926200 commit 3ec9baf

1 file changed

Lines changed: 5 additions & 0 deletions

File tree

gc/mmtk/mmtk.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,6 +1329,11 @@ rb_gc_impl_shutdown_call_finalizer(void *objspace_ptr)
13291329

13301330
unsigned int lev = RB_GC_VM_LOCK();
13311331
{
1332+
struct MMTk_ractor_cache *rc;
1333+
ccan_list_for_each(&objspace->ractor_caches, rc, list_node) {
1334+
mmtk_flush_obj_free_buffer(rc);
1335+
}
1336+
13321337
struct MMTk_RawVecOfObjRef registered_candidates = mmtk_get_all_obj_free_candidates();
13331338
for (size_t i = 0; i < registered_candidates.len; i++) {
13341339
VALUE obj = (VALUE)registered_candidates.ptr[i];

0 commit comments

Comments
 (0)