summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-08 16:31:37 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-08 16:31:37 +0900
commitb277c58e783f187cfff1b7bb5843d2e95d3c3b0b (patch)
tree2ff7f94b53398541f808d264295d1689a166b7f2
parentf3d4ff16d39b34585d41c31ffc09a0ffb512ff81 (diff)
downloadmruby-b277c58e783f187cfff1b7bb5843d2e95d3c3b0b.tar.gz
mruby-b277c58e783f187cfff1b7bb5843d2e95d3c3b0b.zip
Mark classes referenced from saved backtrace.
Maybe related to #3438
-rw-r--r--src/gc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 88d157d9c..1608dbcb2 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -857,7 +857,12 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc)
mrb_gc_mark(mrb, (struct RBasic*)mrb->top_self);
/* mark exception */
mrb_gc_mark(mrb, (struct RBasic*)mrb->exc);
+ /* mark backtrace */
mrb_gc_mark(mrb, (struct RBasic*)mrb->backtrace.exc);
+ e = (size_t)mrb->backtrace.n;
+ for (i=0; i<e; i++) {
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->backtrace.entries[i].klass);
+ }
/* mark pre-allocated exception */
mrb_gc_mark(mrb, (struct RBasic*)mrb->nomem_err);
#ifdef MRB_GC_FIXED_ARENA