diff --git a/gc.c b/gc.c index 49a08f9..2f3275c 100644 --- a/gc.c +++ b/gc.c @@ -6166,10 +6166,14 @@ objspace_malloc_fixup(rb_objspace_t *objspace, void *mem, size_t size) } #define TRY_WITH_GC(alloc) do { \ - if (!(alloc) && \ - (!garbage_collect_with_gvl(objspace, 1, 1, GPR_FLAG_MALLOC) || /* full mark && immediate sweep */ \ - !(alloc))) { \ - ruby_memerror(); \ + if (!(alloc)) { \ + if (!garbage_collect_with_gvl(objspace, 1, 1, GPR_FLAG_MALLOC) || /* full mark && immediate sweep */ \ + !(alloc)) { \ + ruby_memerror(); \ + } \ + } \ + else if (ruby_gc_stress) { \ + garbage_collect_with_gvl(objspace, 1, 1, GPR_FLAG_MALLOC); \ } \ } while (0)