From 7911d42f1b3b4d6fdaab7a70d69c7bb1351af06c Mon Sep 17 00:00:00 2001 From: shyouhei Date: Thu, 2 Dec 2010 14:58:41 +0000 Subject: * NEWS: entry for ruby_vm_at_exit(). * eval.c (ruby_cleanup): bug fix around at_exit (1) timing was wrong. (2) execution order was opposite. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ NEWS | 3 +++ eval.c | 14 +++++++------- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index fb124518d0..bdca90c727 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Dec 2 23:52:26 2010 URABE Shyouhei + + * NEWS: entry for ruby_vm_at_exit(). + + * eval.c (ruby_cleanup): bug fix around at_exit (1) timing was + wrong. (2) execution order was opposite. + Thu Dec 2 23:05:14 2010 NAKAMURA Usaku * win32/Makefile.sub (RCFLAGS): -nologo switch is only available in diff --git a/NEWS b/NEWS index fe1135b7ce..c37ec08463 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,9 @@ with all sufficient information, see the ChangeLog file. * rb_scan_args() is enhanced with support for option hash argument extraction. +* ruby_vm_at_exit() added. This enables extension libs to hool a VM + termination. + === Library updates (outstanding ones only) * builtin classes diff --git a/eval.c b/eval.c index e54b5400c8..acfe8e93d5 100644 --- a/eval.c +++ b/eval.c @@ -151,13 +151,6 @@ ruby_cleanup(volatile int ex) } POP_TAG(); - /* at_exit functions called here; any other place more apropriate - * for this purpose? let me know if any. */ - for (i=0; ierrinfo; PUSH_TAG(); if ((state = EXEC_TAG()) == 0) { @@ -172,6 +165,13 @@ ruby_cleanup(volatile int ex) POP_TAG(); rb_thread_stop_timer_thread(); + /* at_exit functions called here; any other place more apropriate + * for this purpose? let me know if any. */ + for (i=RARRAY_LEN(ary) - 1; i>=0; i--) { + ((void(*)(rb_vm_t*))RARRAY_PTR(ary)[i])(vm); + } + rb_ary_clear(ary); + #if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1 switch (ex) { #if EXIT_SUCCESS != 0 -- cgit v1.2.3