summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-02-28 01:25:50 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-02-28 01:25:50 +0900
commit90c54d1ead5eeec223d8da0b88ce88d3da9756ff (patch)
treebab7cbc9a68a73a704c76c9ed54f3af4ba5e8a97
parentc39e2a4e5d966959a05fc61451ddf5419c9e67ba (diff)
downloadmruby-90c54d1ead5eeec223d8da0b88ce88d3da9756ff.tar.gz
mruby-90c54d1ead5eeec223d8da0b88ce88d3da9756ff.zip
remove break altogether in ci loop
-rw-r--r--src/gc.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gc.c b/src/gc.c
index ec6ffba0a..8eda76b26 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -460,13 +460,15 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
for (i=0; i<e; i++) {
mrb_gc_mark(mrb, (struct RBasic*)c->ensure[i]);
}
- /* mark closure */
- for (ci = c->cibase; ci <= c->ci; ci++) {
- if (!ci) break;
- mrb_gc_mark(mrb, (struct RBasic*)ci->env);
- mrb_gc_mark(mrb, (struct RBasic*)ci->proc);
- mrb_gc_mark(mrb, (struct RBasic*)ci->target_class);
+ /* mark VM stack */
+ if (c->cibase) {
+ for (ci = c->cibase; ci <= c->ci; ci++) {
+ mrb_gc_mark(mrb, (struct RBasic*)ci->env);
+ mrb_gc_mark(mrb, (struct RBasic*)ci->proc);
+ mrb_gc_mark(mrb, (struct RBasic*)ci->target_class);
+ }
}
+ /* mark fibers */
if (c->prev && c->prev->fib) {
mrb_gc_mark(mrb, (struct RBasic*)c->prev->fib);
}