From 74454f5796fda5c7ec2d47a95acccb7d742a0974 Mon Sep 17 00:00:00 2001 From: mame Date: Mon, 4 Jul 2011 12:21:02 +0000 Subject: * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/coverage/coverage.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'ext') diff --git a/ext/coverage/coverage.c b/ext/coverage/coverage.c index 3a26aaab11..29ac7090f3 100644 --- a/ext/coverage/coverage.c +++ b/ext/coverage/coverage.c @@ -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 @@ static VALUE 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 @@ static VALUE 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. -- cgit v1.2.3