diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-18 07:29:17 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-18 07:29:17 +0000 |
commit | d482ac18c5cb70a3f888f335cd9a32b196a558bc (patch) | |
tree | df6b3edc1d6715dd11be75675f5ec55c54d3fa11 /eval.c | |
parent | 1a1fb4309ac4ad58c9fb169d775f813c395f53fb (diff) | |
download | ruby-d482ac18c5cb70a3f888f335cd9a32b196a558bc.tar.gz ruby-d482ac18c5cb70a3f888f335cd9a32b196a558bc.tar.xz ruby-d482ac18c5cb70a3f888f335cd9a32b196a558bc.zip |
* common.mk (eval.o): needs vm.h.
* eval.c (ruby_cleanup): destruct current VM before exit.
* gc.c (rb_objspace_free): free object space.
* vm.c (ruby_vm_destruct): destruct and free VM struct.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25000 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -14,6 +14,7 @@ #include "eval_intern.h" #include "iseq.h" #include "gc.h" +#include "ruby/vm.h" #define numberof(array) (int)(sizeof(array) / sizeof((array)[0])) @@ -159,6 +160,7 @@ ruby_cleanup(volatile int ex) POP_TAG(); rb_thread_stop_timer_thread(); + state = 0; for (nerr = 0; nerr < numberof(errs); ++nerr) { VALUE err = errs[nerr]; @@ -172,12 +174,15 @@ ruby_cleanup(volatile int ex) } else if (rb_obj_is_kind_of(err, rb_eSignal)) { VALUE sig = rb_iv_get(err, "signo"); - ruby_default_signal(NUM2INT(sig)); + state = NUM2INT(sig); + break; } else if (ex == 0) { ex = 1; } } + ruby_vm_destruct(GET_VM()); + if (state) ruby_default_signal(state); #if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1 switch (ex) { |