We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 1bce8ca commit ebd13b5Copy full SHA for ebd13b5
1 file changed
shape.c
@@ -324,7 +324,14 @@ shape_tree_mark(void *data)
324
rb_shape_t *end = RSHAPE(GET_SHAPE_TREE()->next_shape_id);
325
while (cursor < end) {
326
if (cursor->edges && !SINGLE_CHILD_P(cursor->edges)) {
327
- rb_gc_mark_movable(cursor->edges);
+ // FIXME: GC compaction may call `rb_shape_traverse_from_new_root`
328
+ // to migrate objects from one object slot to another.
329
+ // Because of this if we don't pin `cursor->edges` it might be turned
330
+ // into a T_MOVED during GC.
331
+ // We'd need to eliminate `SHAPE_T_OBJECT` so that GC never need to lookup
332
+ // shapes this way.
333
+ // rb_gc_mark_movable(cursor->edges);
334
+ rb_gc_mark(cursor->edges);
335
}
336
cursor++;
337
0 commit comments