summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2020-09-22 09:19:42 -0700
committerAaron Patterson <tenderlove@ruby-lang.org>2020-09-22 09:20:04 -0700
commitf3dddd77a925f576acb6abab9b37e8839f028412 (patch)
tree0a763dec4581a7e9cc2a027fe58d5ea4a055b6a3
parent3c808898021009f971b94dae433d74e205175cca (diff)
Add a comment about why we're checking the finalizer table
-rw-r--r--gc.c5
1 files changed, 5 insertions, 0 deletions
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;
}