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/