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

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/

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