summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-18 07:29:17 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-18 07:29:17 +0000
commitd482ac18c5cb70a3f888f335cd9a32b196a558bc (patch)
treedf6b3edc1d6715dd11be75675f5ec55c54d3fa11 /eval.c
parent1a1fb4309ac4ad58c9fb169d775f813c395f53fb (diff)
downloadruby-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.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index 7ba413bd4..b979f28ea 100644
--- a/eval.c
+++ b/eval.c
@@ -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) {