[前][次][番号順一覧][スレッド一覧]

ruby-changes:17644

From: nobu <ko1@a...>
Date: Sun, 31 Oct 2010 22:26:06 +0900 (JST)
Subject: [ruby-changes:17644] Ruby:r29652 (trunk): * eval.c (ruby_cleanup): free current VM and its objspace even

nobu	2010-10-31 22:24:19 +0900 (Sun, 31 Oct 2010)

  New Revision: 29652

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29652

  Log:
    * eval.c (ruby_cleanup): free current VM and its objspace even
      when exiting by SystemExit.

  Modified files:
    trunk/ChangeLog
    trunk/eval.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29651)
+++ ChangeLog	(revision 29652)
@@ -1,3 +1,8 @@
+Sun Oct 31 22:24:14 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval.c (ruby_cleanup): free current VM and its objspace even
+	  when exiting by SystemExit.
+
 Sun Oct 31 22:10:56 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* compile.c (new_child_iseq): adjust argument types.
Index: eval.c
===================================================================
--- eval.c	(revision 29651)
+++ eval.c	(revision 29652)
@@ -162,6 +162,17 @@
     POP_TAG();
     rb_thread_stop_timer_thread();
 
+#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
+    switch (ex) {
+#if EXIT_SUCCESS != 0
+      case 0: ex = EXIT_SUCCESS; break;
+#endif
+#if EXIT_FAILURE != 1
+      case 1: ex = EXIT_FAILURE; break;
+#endif
+    }
+#endif
+
     state = 0;
     for (nerr = 0; nerr < numberof(errs); ++nerr) {
 	VALUE err = errs[nerr];
@@ -172,31 +183,21 @@
 	if (TYPE(err) == T_NODE) continue;
 
 	if (rb_obj_is_kind_of(err, rb_eSystemExit)) {
-	    return sysexit_status(err);
+	    ex = sysexit_status(err);
+	    break;
 	}
 	else if (rb_obj_is_kind_of(err, rb_eSignal)) {
 	    VALUE sig = rb_iv_get(err, "signo");
 	    state = NUM2INT(sig);
 	    break;
 	}
-	else if (ex == 0) {
-	    ex = 1;
+	else if (ex == EXIT_SUCCESS) {
+	    ex = EXIT_FAILURE;
 	}
     }
     ruby_vm_destruct(GET_VM());
     if (state) ruby_default_signal(state);
 
-#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
-    switch (ex) {
-#if EXIT_SUCCESS != 0
-      case 0: return EXIT_SUCCESS;
-#endif
-#if EXIT_FAILURE != 1
-      case 1: return EXIT_FAILURE;
-#endif
-    }
-#endif
-
     return ex;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]