1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Prevent MJIT compilation from running while moving

pointers.

Instead of 4fe908c164, just locking the MJIT
worker may be fine for this case. And also we might have the same issue
in all `gc_compact_after_gc` calls.
This commit is contained in:
Takashi Kokubun 2019-05-29 08:56:26 +09:00
parent 6b5e712361
commit 797d7efde1
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD

4
gc.c
View file

@ -8272,6 +8272,8 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl
{
if (0) fprintf(stderr, "gc_compact_after_gc: %d,%d,%d\n", use_toward_empty, use_double_pages, use_verifier);
mjit_gc_start_hook(); // prevent MJIT from running while moving pointers related to ISeq
if (use_verifier) {
gc_verify_internal_consistency(Qnil);
}
@ -8315,6 +8317,8 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl
(void)moved_list;
#endif
mjit_gc_exit_hook(); // unlock MJIT here, because `rb_gc()` calls `mjit_gc_start_hook()` again.
/* GC after compaction to eliminate T_MOVED */
rb_gc();
}