From f3dddd77a925f576acb6abab9b37e8839f028412 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 22 Sep 2020 09:19:42 -0700 Subject: [PATCH] Add a comment about why we're checking the finalizer table --- gc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gc.c b/gc.c index 5e84f513b8..d9c873166f 100644 --- a/gc.c +++ b/gc.c @@ -7861,6 +7861,11 @@ gc_is_moveable_obj(rb_objspace_t *objspace, VALUE obj) case T_NODE: case T_CLASS: if (FL_TEST(obj, FL_FINALIZE)) { + /* The finalizer table is a numtable. It looks up objects by address. + * We can't mark the keys in the finalizer table because that would + * prevent the objects from being collected. This check prevents + * objects that are keys in the finalizer table from being moved + * without directly pinning them. */ if (st_is_member(finalizer_table, obj)) { return FALSE; }