diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-22 01:38:08 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-22 01:38:08 +0000 |
commit | a6ca9f9fce7bcef4a1c04384bb834b5ee0013b16 (patch) | |
tree | 7200856f12f9e06f29dbc75fdb51b8c7dbf6cfe0 | |
parent | d553c518d525851d8d4a4f8db63e3027e4a5d72d (diff) |
* vm.c (ruby_vm_destruct): do not use ruby_xfree() after freeing
objspace.
* gc.c (ruby_mimfree): added. It is similar to ruby_mimmalloc().
* internal.h: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | gc.c | 10 | ||||
-rw-r--r-- | internal.h | 1 | ||||
-rw-r--r-- | vm.c | 7 |
4 files changed, 24 insertions, 3 deletions
@@ -1,3 +1,12 @@ +Fri Nov 22 10:35:57 2013 Koichi Sasada <ko1@atdot.net> + + * vm.c (ruby_vm_destruct): do not use ruby_xfree() after freeing + objspace. + + * gc.c (ruby_mimfree): added. It is similar to ruby_mimmalloc(). + + * internal.h: ditto. + Fri Nov 22 09:42:35 2013 Zachary Scott <e@zzak.io> * test/digest/test_digest.rb: Reverse order of assert_equal @@ -5715,6 +5715,16 @@ ruby_mimmalloc(size_t size) return mem; } +void +ruby_mimfree(void *ptr) +{ + size_t *mem = (size_t *)ptr; +#if CALC_EXACT_MALLOC_SIZE + mem = mem - 1; +#endif + free(mem); +} + #if CALC_EXACT_MALLOC_SIZE /* * call-seq: diff --git a/internal.h b/internal.h index 05bbbc74c8..10819a21c7 100644 --- a/internal.h +++ b/internal.h @@ -428,6 +428,7 @@ NORETURN(void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path) /* gc.c */ void Init_heap(void); void *ruby_mimmalloc(size_t size); +void ruby_mimfree(void *ptr); void rb_objspace_set_event_hook(const rb_event_flag_t event); void rb_gc_writebarrier_remember_promoted(VALUE obj); @@ -1654,14 +1654,15 @@ ruby_vm_destruct(rb_vm_t *vm) st_free_table(vm->living_threads); vm->living_threads = 0; } + 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 - ruby_vm_run_at_exit_hooks(vm); - rb_vm_gvl_destroy(vm); - ruby_xfree(vm); + /* after freeing objspace, you *can't* use ruby_xfree() */ + ruby_mimfree(vm); ruby_current_vm = 0; } RUBY_FREE_LEAVE("vm"); |