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

ruby-changes:23285

From: naruse <ko1@a...>
Date: Sun, 15 Apr 2012 16:37:55 +0900 (JST)
Subject: [ruby-changes:23285] naruse:r35336 (trunk): Add debug prints to inspect TC_JSONGenerate#test_gc's timeout issue.

naruse	2012-04-15 16:37:45 +0900 (Sun, 15 Apr 2012)

  New Revision: 35336

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

  Log:
    Add debug prints to inspect TC_JSONGenerate#test_gc's timeout issue.

  Modified files:
    trunk/ext/json/fbuffer/fbuffer.h
    trunk/ext/json/generator/generator.c
    trunk/test/json/test_json_generate.rb

Index: ext/json/fbuffer/fbuffer.h
===================================================================
--- ext/json/fbuffer/fbuffer.h	(revision 35335)
+++ ext/json/fbuffer/fbuffer.h	(revision 35336)
@@ -68,6 +68,7 @@
     if (!fb->ptr) {
         fb->ptr = ALLOC_N(char, fb->initial_length);
         fb->capa = fb->initial_length;
+        fb->len = 0;
     }
 
     for (required = fb->capa; requested > required - fb->len; required <<= 1);
Index: ext/json/generator/generator.c
===================================================================
--- ext/json/generator/generator.c	(revision 35335)
+++ ext/json/generator/generator.c	(revision 35336)
@@ -762,6 +762,7 @@
 {
     VALUE tmp = rb_funcall(obj, i_to_s, 0);
     fbuffer_append_str(buffer, tmp);
+    RB_GC_GUARD(tmp);
 }
 
 static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
Index: test/json/test_json_generate.rb
===================================================================
--- test/json/test_json_generate.rb	(revision 35335)
+++ test/json/test_json_generate.rb	(revision 35336)
@@ -214,25 +214,25 @@
     assert_equal 128, s.buffer_initial_length
   end
 
-  require'timeout'
   def test_gc
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
     bignum_too_long_to_embed_as_string = 1234567890123456789012345
-    expect = nil
-    stress = nil
-    timeout(1) do
-      expect = bignum_too_long_to_embed_as_string.to_s
-    end
-    timeout(30) do
-      GC.start
-      stress, GC.stress = GC.stress, true
-    end
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
+    expect = bignum_too_long_to_embed_as_string.to_s
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
+    GC.start
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
+    stress, GC.stress = GC.stress, true
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
 
-    timeout(30) do
-      10.times do |i|
-        tmp = bignum_too_long_to_embed_as_string.to_json
-        assert_equal expect, tmp
-      end
+    10.times do |i|
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
+      tmp = bignum_too_long_to_embed_as_string.to_json
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
+      assert_equal expect, tmp
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
     end
+    $stdout.puts 'debug: %s:%d:' % [__FILE__, __LINE__]
   ensure
     GC.stress = stress
   end if GC.respond_to?(:stress=)

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

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