diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-04 12:21:02 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-04 12:21:02 +0000 |
commit | 74454f5796fda5c7ec2d47a95acccb7d742a0974 (patch) | |
tree | c63f52ec7018bea64d4464563833d24b34450aca /ext/coverage | |
parent | 276033220d75692dd1f6a6c3823748202f3eb125 (diff) | |
download | ruby-74454f5796fda5c7ec2d47a95acccb7d742a0974.tar.gz |
* 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
Diffstat (limited to 'ext/coverage')
-rw-r--r-- | ext/coverage/coverage.c | 26 |
1 files changed, 9 insertions, 17 deletions
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. |