diff --git a/gc/gc.h b/gc/gc.h index a5edc26..097ddb9 100644 --- a/gc/gc.h +++ b/gc/gc.h @@ -108,6 +108,7 @@ MODULAR_GC_FN void rb_gc_initialize_vm_context(struct rb_gc_vm_context *context) MODULAR_GC_FN void rb_gc_worker_thread_set_vm_context(struct rb_gc_vm_context *context); MODULAR_GC_FN void rb_gc_worker_thread_unset_vm_context(struct rb_gc_vm_context *context); MODULAR_GC_FN void rb_gc_move_obj_during_marking(VALUE from, VALUE to); +MODULAR_GC_FN void rb_gc_print_backtrace(); #endif #if USE_MODULAR_GC diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 3c9518a..042517e 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -446,6 +446,11 @@ rb_mmtk_gc_thread_bug(const char *msg, ...) vsnprintf(objspace->crash_context.crash_msg, sizeof(objspace->crash_context.crash_msg), msg, args); va_end(args); + fprintf(stderr, "-- GC thread backtrace " + "-------------------------------------------\n"); + rb_gc_print_backtrace(); + fprintf(stderr, "\n"); + rb_mmtk_resume_mutators(); sleep(5);