ruby-changes:39786
From: nobu <ko1@a...>
Date: Tue, 15 Sep 2015 19:39:16 +0900 (JST)
Subject: [ruby-changes:39786] nobu:r51867 (trunk): gc.c: define objspace functions always
nobu 2015-09-15 19:38:58 +0900 (Tue, 15 Sep 2015) New Revision: 51867 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51867 Log: gc.c: define objspace functions always * gc.c (rb_objspace_alloc, rb_objspace_free): define always regardless ENABLE_VM_OBJSPACE, and free heap pages. Modified files: trunk/ChangeLog trunk/gc.c trunk/vm.c Index: ChangeLog =================================================================== --- ChangeLog (revision 51866) +++ ChangeLog (revision 51867) @@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Tue Sep 15 19:38:55 2015 Nobuyoshi Nakada <nobu@r...> + + * 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@r...> * win32/win32.c (rb_w32_sysinit, rb_w32_readdir): compare by Index: gc.c =================================================================== --- gc.c (revision 51866) +++ gc.c (revision 51867) @@ -1256,11 +1256,14 @@ RVALUE_WHITE_P(VALUE obj) https://github.com/ruby/ruby/blob/trunk/gc.c#L1256 --------------------------- 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 https://github.com/ruby/ruby/blob/trunk/gc.c#L1306 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 https://github.com/ruby/ruby/blob/trunk/gc.c#L3667 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) https://github.com/ruby/ruby/blob/trunk/gc.c#L3679 chunk = next; } } -#endif static void push_mark_stack(mark_stack_t *stack, VALUE data) Index: vm.c =================================================================== --- vm.c (revision 51866) +++ vm.c (revision 51867) @@ -1861,9 +1861,7 @@ ruby_vm_destruct(rb_vm_t *vm) https://github.com/ruby/ruby/blob/trunk/vm.c#L1861 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) https://github.com/ruby/ruby/blob/trunk/vm.c#L1870 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) https://github.com/ruby/ruby/blob/trunk/vm.c#L2796 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(); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/