summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-04-22 15:29:17 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-04-25 10:41:50 +0900
commit01f78258524dabdd183ed75fa6488450f693cd53 (patch)
treedbefd88b3010ea46292aa8f4ca7888be4c3ffdde
parent6088276cc833c104d0228f5c03140601c7fc06df (diff)
downloadmruby-01f78258524dabdd183ed75fa6488450f693cd53.tar.gz
mruby-01f78258524dabdd183ed75fa6488450f693cd53.zip
Use fiber marking instead of `mark_context`.
To avoid redundant `mark_context()`.
-rw-r--r--src/gc.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/gc.c b/src/gc.c
index c703428b5..766fbd330 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -594,8 +594,8 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
}
/* mark fibers */
mrb_gc_mark(mrb, (struct RBasic*)c->fib);
- if (c->prev) {
- mark_context(mrb, c->prev);
+ if (c->prev && c->prev->fib) {
+ mrb_gc_mark(mrb, (struct RBasic*)c->prev->fib);
}
}
@@ -882,10 +882,10 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc)
mrb_gc_mark(mrb, (struct RBasic*)mrb->arena_err);
#endif
+ mark_context(mrb, mrb->root_c);
if (mrb->root_c != mrb->c) {
mark_context(mrb, mrb->c);
}
- mark_context(mrb, mrb->root_c);
}
static size_t