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

ruby-changes:18815

From: nobu <ko1@a...>
Date: Fri, 11 Feb 2011 19:53:24 +0900 (JST)
Subject: [ruby-changes:18815] Ruby:r30840 (trunk): * eval.c (ruby_cleanup): use rb_ary_free to free internal object.

nobu	2011-02-11 19:45:34 +0900 (Fri, 11 Feb 2011)

  New Revision: 30840

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

  Log:
    * eval.c (ruby_cleanup): use rb_ary_free to free internal object.
    * gc.h (RUBY_FREE_UNLESS_NULL): get rid of double free.
      [ruby-core:35192]

  Modified files:
    trunk/ChangeLog
    trunk/eval.c
    trunk/gc.h
    trunk/test/ruby/test_thread.rb
    trunk/vm.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30839)
+++ ChangeLog	(revision 30840)
@@ -1,3 +1,10 @@
+Fri Feb 11 19:45:26 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval.c (ruby_cleanup): use rb_ary_free to free internal object.
+
+	* gc.h (RUBY_FREE_UNLESS_NULL): get rid of double free.
+	  [ruby-core:35192]
+
 Fri Feb 11 16:57:03 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/ruby/test_transcode.rb (test_from_cp50221): fix wrong
Index: eval.c
===================================================================
--- eval.c	(revision 30839)
+++ eval.c	(revision 30840)
@@ -170,7 +170,7 @@
     for (i=RARRAY_LEN(ary) - 1; i>=0; i--) {
        ((void(*)(rb_vm_t*))RARRAY_PTR(ary)[i])(vm);
     }
-    rb_ary_clear(ary);
+    rb_ary_free(ary);
 
 #if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
     switch (ex) {
Index: gc.h
===================================================================
--- gc.h	(revision 30839)
+++ gc.h	(revision 30840)
@@ -58,7 +58,7 @@
 #endif
 
 #define RUBY_MARK_UNLESS_NULL(ptr) if(RTEST(ptr)){rb_gc_mark(ptr);}
-#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);}
+#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
 
 #if STACK_GROW_DIRECTION > 0
 # define STACK_UPPER(x, a, b) (a)
Index: vm.c
===================================================================
--- vm.c	(revision 30839)
+++ vm.c	(revision 30840)
@@ -230,7 +230,7 @@
 {
     RUBY_FREE_ENTER("env");
     if (ptr) {
-	const rb_env_t * const env = ptr;
+	rb_env_t *const env = ptr;
 	RUBY_FREE_UNLESS_NULL(env->env);
 	ruby_xfree(ptr);
     }
Index: test/ruby/test_thread.rb
===================================================================
--- test/ruby/test_thread.rb	(revision 30839)
+++ test/ruby/test_thread.rb	(revision 30840)
@@ -384,7 +384,7 @@
       end
     INPUT
 
-    assert_in_out_err(%w(--disable-gems -d), <<-INPUT, %w(false 2), /.+/)
+    assert_in_out_err(%w(--disable-gems -d), <<-INPUT, %w(false 2), %r".+")
       p Thread.abort_on_exception
       begin
         Thread.new { raise }
@@ -577,6 +577,15 @@
     assert_nothing_raised {arr.hash}
     assert(obj[:visited])
   end
+
+  def test_thread_instance_variable
+    bug4389 = '[ruby-core:35192]'
+    assert_in_out_err([], <<-INPUT, %w(), [], bug4389)
+      class << Thread.current
+        @data = :data
+      end
+    INPUT
+  end
 end
 
 class TestThreadGroup < Test::Unit::TestCase

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

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