ruby-changes:20353
From: mame <ko1@a...>
Date: Mon, 4 Jul 2011 21:21:11 +0900 (JST)
Subject: [ruby-changes:20353] mame:r32401 (trunk): * ext/coverage/coverage.c: revert r32071. The commit caused SEGV on
mame 2011-07-04 21:21:02 +0900 (Mon, 04 Jul 2011) New Revision: 32401 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32401 Log: * ext/coverage/coverage.c: revert r32071. The commit caused SEGV on some minor nonfree OS. I have no means of debugging the bug. My personal opinion is that such OS should be unsupported unless there is an active maintainer. [ruby-core:37352] * test/coverage/test_coverage.rb: ditto. Modified files: trunk/ChangeLog trunk/ext/coverage/coverage.c trunk/test/coverage/test_coverage.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 32400) +++ ChangeLog (revision 32401) @@ -1,3 +1,12 @@ +Mon Jul 4 20:42:31 2011 Yusuke Endoh <mame@t...> + + * ext/coverage/coverage.c: revert r32071. The commit caused SEGV on + some minor nonfree OS. I have no means of debugging the bug. My + personal opinion is that such OS should be unsupported unless there + is an active maintainer. [ruby-core:37352] + + * test/coverage/test_coverage.rb: ditto. + Mon Jul 4 07:14:12 2011 NARUSE, Yui <naruse@r...> * thread_pthread.c (get_stack): the return address of get_stack Index: ext/coverage/coverage.c =================================================================== --- ext/coverage/coverage.c (revision 32400) +++ ext/coverage/coverage.c (revision 32401) @@ -11,8 +11,6 @@ #include "ruby.h" #include "vm_core.h" -static VALUE rb_coverages = Qundef; - /* * call-seq: * Coverage.start => nil @@ -23,25 +21,19 @@ rb_coverage_start(VALUE klass) { if (!RTEST(rb_get_coverages())) { - if (rb_coverages == Qundef) { - rb_coverages = rb_hash_new(); - RBASIC(rb_coverages)->klass = 0; - } - rb_set_coverages(rb_coverages); + VALUE coverages = rb_hash_new(); + RBASIC(coverages)->klass = 0; + rb_set_coverages(coverages); } return Qnil; } static int -coverage_result_i(st_data_t key, st_data_t val, st_data_t h) +coverage_result_i(st_data_t key, st_data_t val, st_data_t dummy) { - VALUE path = (VALUE)key; VALUE coverage = (VALUE)val; - VALUE coverages = (VALUE)h; - coverage = rb_ary_dup(coverage); - rb_ary_clear((VALUE)val); + RBASIC(coverage)->klass = rb_cArray; rb_ary_freeze(coverage); - rb_hash_aset(coverages, path, coverage); return ST_CONTINUE; } @@ -56,14 +48,14 @@ rb_coverage_result(VALUE klass) { VALUE coverages = rb_get_coverages(); - VALUE ncoverages = rb_hash_new(); if (!RTEST(coverages)) { rb_raise(rb_eRuntimeError, "coverage measurement is not enabled"); } - st_foreach(RHASH_TBL(coverages), coverage_result_i, ncoverages); - rb_hash_freeze(ncoverages); + RBASIC(coverages)->klass = rb_cHash; + st_foreach(RHASH_TBL(coverages), coverage_result_i, 0); + rb_hash_freeze(coverages); rb_reset_coverages(); - return ncoverages; + return coverages; } /* Coverage provides coverage measurement feature for Ruby. Index: test/coverage/test_coverage.rb =================================================================== --- test/coverage/test_coverage.rb (revision 32400) +++ test/coverage/test_coverage.rb (revision 32401) @@ -15,29 +15,4 @@ assert_kind_of(Array, val) end end - - def test_restarting_coverage - loaded_features = $".dup - - Dir.mktmpdir {|tmp| - Dir.chdir(tmp) { - File.open("test.rb", "w") do |f| - f.puts <<-EOS - def coverage_test_method - :ok - end - EOS - end - - Coverage.start - require tmp + '/test.rb' - Coverage.result - Coverage.start - coverage_test_method - assert_equal 1, Coverage.result.size - } - } - ensure - $".replace loaded_features - end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/