summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-04-20 15:50:52 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-04-20 15:50:52 +0900
commitd2cad9ac5b8db89fc9d21f5795846f983236798c (patch)
treecbcbf25cc7c58b56ca381d6623cc8f94b5ccfc76 /src
parent62dae09bf6e2ac965ec7384100f56f40737cbd6f (diff)
downloadmruby-d2cad9ac5b8db89fc9d21f5795846f983236798c.tar.gz
mruby-d2cad9ac5b8db89fc9d21f5795846f983236798c.zip
Disable GC during `gc_each_objects()`; fix #3616
Diffstat (limited to 'src')
-rw-r--r--src/gc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 833d35c71..c83ce9df8 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1491,7 +1491,9 @@ static void
gc_each_objects(mrb_state *mrb, mrb_gc *gc, mrb_each_object_callback *callback, void *data)
{
mrb_heap_page* page = gc->heaps;
+ mrb_bool old_disable = gc->disabled;
+ gc->disabled = TRUE;
while (page != NULL) {
RVALUE *p, *pend;
@@ -1504,6 +1506,7 @@ gc_each_objects(mrb_state *mrb, mrb_gc *gc, mrb_each_object_callback *callback,
page = page->next;
}
+ gc->disabled = old_disable;
}
void