aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-09-15 10:38:58 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-09-15 10:38:58 +0000
commitabbd388431b570395db0806ebbb4626c86cfd973 (patch)
treee23f2ed77d0b126c051439bc867bb445bd99c9bc
parent70b2af3b211f9746a5f9fe6bd76cc0fff3fbe2b0 (diff)
downloadruby-abbd388431b570395db0806ebbb4626c86cfd973.tar.gz
gc.c: define objspace functions always
* gc.c (rb_objspace_alloc, rb_objspace_free): define always regardless ENABLE_VM_OBJSPACE, and free heap pages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--gc.c11
-rw-r--r--vm.c6
3 files changed, 12 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 27866be2ff..3c6b4afd7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Sep 15 19:38:55 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_objspace_alloc, rb_objspace_free): define always
+ regardless ENABLE_VM_OBJSPACE, and free heap pages.
+
Tue Sep 15 15:15:41 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* win32/win32.c (rb_w32_sysinit, rb_w32_readdir): compare by
diff --git a/gc.c b/gc.c
index 9fc3549df4..2b844479e1 100644
--- a/gc.c
+++ b/gc.c
@@ -1256,11 +1256,14 @@ RVALUE_WHITE_P(VALUE obj)
--------------------------- ObjectSpace -----------------------------
*/
-#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
rb_objspace_t *
rb_objspace_alloc(void)
{
+#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
rb_objspace_t *objspace = calloc(1, sizeof(rb_objspace_t));
+#else
+ rb_objspace_t *objspace = &rb_objspace;
+#endif
malloc_limit = gc_params.malloc_limit_min;
return objspace;
@@ -1303,9 +1306,11 @@ rb_objspace_free(rb_objspace_t *objspace)
objspace->eden_heap.pages = NULL;
}
free_stack_chunks(&objspace->mark_stack);
+#if !(defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE)
+ if (objspace == &rb_objspace) return;
+#endif
free(objspace);
}
-#endif
static void
heap_pages_expand_sorted(rb_objspace_t *objspace)
@@ -3662,7 +3667,6 @@ pop_mark_stack_chunk(mark_stack_t *stack)
stack->index = stack->limit;
}
-#if (defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE) || (RGENGC_CHECK_MODE >= 4)
static void
free_stack_chunks(mark_stack_t *stack)
{
@@ -3675,7 +3679,6 @@ free_stack_chunks(mark_stack_t *stack)
chunk = next;
}
}
-#endif
static void
push_mark_stack(mark_stack_t *stack, VALUE data)
diff --git a/vm.c b/vm.c
index 951165694a..bd996c5ca7 100644
--- a/vm.c
+++ b/vm.c
@@ -1861,9 +1861,7 @@ ruby_vm_destruct(rb_vm_t *vm)
if (vm) {
rb_thread_t *th = vm->main_thread;
-#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
struct rb_objspace *objspace = vm->objspace;
-#endif
vm->main_thread = 0;
if (th) {
rb_fiber_reset_root_local_storage(th->self);
@@ -1872,11 +1870,9 @@ ruby_vm_destruct(rb_vm_t *vm)
rb_vm_living_threads_init(vm);
ruby_vm_run_at_exit_hooks(vm);
rb_vm_gvl_destroy(vm);
-#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
if (objspace) {
rb_objspace_free(objspace);
}
-#endif
/* after freeing objspace, you *can't* use ruby_xfree() */
ruby_mimfree(vm);
ruby_current_vm = 0;
@@ -2800,9 +2796,7 @@ Init_BareVM(void)
rb_thread_set_current_raw(th);
vm_init2(vm);
-#if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
vm->objspace = rb_objspace_alloc();
-#endif
ruby_current_vm = vm;
Init_native_thread();