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

ruby-changes:16479

From: tarui <ko1@a...>
Date: Tue, 29 Jun 2010 01:45:53 +0900 (JST)
Subject: [ruby-changes:16479] Ruby:r28468 (ruby_1_9_2): merge from trunk (r28440)

tarui	2010-06-29 01:45:35 +0900 (Tue, 29 Jun 2010)

  New Revision: 28468

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

  Log:
    merge from trunk (r28440)
    
    * ext/dl/lib/dl/func.rb (call): don't overwrite original arguments
      to defend from GC.
    
    * test/dl/test_func.rb (test_string): add test for above.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/ext/dl/lib/dl/func.rb
    branches/ruby_1_9_2/test/dl/test_func.rb

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28467)
+++ ruby_1_9_2/ChangeLog	(revision 28468)
@@ -1,3 +1,9 @@
+Tue Jun 29 01:44:33 2010  Masaya Tarui  <tarui@r...>
+
+	* ext/dl/lib/dl/func.rb (call): don't overwrite original arguments
+	  to defend from GC.
+	* test/dl/test_func.rb (test_string): add test for above.
+
 Tue Jun 29 01:41:42 2010  Masaya Tarui  <tarui@r...>
 
 	* include/ruby/ruby.h (static inline rb_gc_guarded_ptr): prevent
Index: ruby_1_9_2/ext/dl/lib/dl/func.rb
===================================================================
--- ruby_1_9_2/ext/dl/lib/dl/func.rb	(revision 28467)
+++ ruby_1_9_2/ext/dl/lib/dl/func.rb	(revision 28468)
@@ -55,8 +55,8 @@
         super
       else
         funcs = []
-        args = wrap_args(args, @stack.types, funcs, &block)
-        r = @cfunc.call(@stack.pack(args))
+        _args = wrap_args(args, @stack.types, funcs, &block)
+        r = @cfunc.call(@stack.pack(_args))
         funcs.each{|f| f.unbind_at_call()}
         return wrap_result(r)
       end
Index: ruby_1_9_2/test/dl/test_func.rb
===================================================================
--- ruby_1_9_2/test/dl/test_func.rb	(revision 28467)
+++ ruby_1_9_2/test/dl/test_func.rb	(revision 28468)
@@ -46,6 +46,18 @@
       assert_equal("123", str.to_s)
     end
 
+    def test_string()
+      stress, GC.stress = GC.stress, true
+      f = Function.new(CFunc.new(@libc['strcpy'], TYPE_VOIDP, 'strcpy'),
+                       [TYPE_VOIDP, TYPE_VOIDP])
+      buff = "000"
+      str = f.call(buff, "123")
+      assert_equal("123", buff)
+      assert_equal("123", str.to_s)
+    ensure
+      GC.stress = stress
+    end   
+
     def test_isdigit()
       f = Function.new(CFunc.new(@libc['isdigit'], TYPE_INT, 'isdigit'),
                        [TYPE_INT])

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

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