From c0b5bc4ae82bd5abfdfb5ac80948b86c9165d3bf Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 9 Dec 2023 15:55:19 +0900 Subject: [PATCH] Consider proc to be GC'ed if fiber is terminated When fiber is terminated, the pointer indicated by `f->cxt->cibase->proc` is not protected from GC. I should have done this patch way as of commit 9af6264d6b5127c8a6ef4c2a6b236829f0eced51 (#6105). --- mrbgems/mruby-fiber/src/fiber.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index e91415dfe..ed125c3da 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -382,7 +382,7 @@ fiber_to_s(mrb_state *mrb, mrb_value self) const char *file; int32_t line; const struct RProc *p = f->cxt->cibase->proc; - if (!MRB_PROC_CFUNC_P(p) && !MRB_PROC_ALIAS_P(p) && + if (f->cxt->status != MRB_FIBER_TERMINATED && !MRB_PROC_CFUNC_P(p) && !MRB_PROC_ALIAS_P(p) && mrb_debug_get_position(mrb, p->body.irep, 0, &line, &file)) { mrb_str_cat_cstr(mrb, s, file); mrb_str_cat_lit(mrb, s, ":");