Project

General

Profile

Actions

Bug #5104

closed

test_rinda.rb の GC保護もれ

Added by nagachika (Tomoyuki Chikanaga) over 12 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-dev:44253]

Description

make test-all TESTS="--gc-stress -vq rinda/test_rinda.rb -n test_remote_array_and_hash"
と GC.stress = true で rinda のテストを通すと環境によって以下のように失敗します。

Rinda::TupleSpaceProxyTest#test_remote_array_and_hash = 4.62 s = E

Finished tests in 4.626161s, 0.2162 tests/s, 0.0000 assertions/s.

  1. Error:
    test_remote_array_and_hash(Rinda::TupleSpaceProxyTest):
    NoMethodError: undefined method size' for nil:NilClass /home/chikanaga/opt/ruby-trunk/src/ruby/test/rinda/test_rinda.rb:542:in test_remote_array_and_hash'
    ../ruby/test/runner.rb:15:in `'

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips

これはおそらくテストが悪くて、DRbObject は渡されたオブジェクトへの参照を保持せず object_id だけ持つので
参照されるオブジェクトが GC されないようにしないといけないと思います。どうでしょうか。
以下のようにローカル変数に格納して保護すれば OK になりました。

diff --git a/test/rinda/test_rinda.rb b/test/rinda/test_rinda.rb
index b69b63a..f113777 100644
--- a/test/rinda/test_rinda.rb
+++ b/test/rinda/test_rinda.rb
@@ -539,9 +539,11 @@ class TupleSpaceProxyTest < Test::Unit::TestCase
end

def test_remote_array_and_hash

  • @ts.write(DRbObject.new([1, 2, 3]))
  • ary = [1, 2, 3]
  • @ts.write(DRbObject.new(ary))
    assert_equal([1, 2, 3], @ts.take([1, 2, 3], 0))
  • @ts.write(DRbObject.new({'head' => 1, 'tail' => 2}))
  • hsh = {'head' => 1, 'tail' => 2}
  • @ts.write(DRbObject.new(hsh))
    assert_equal({'head' => 1, 'tail' => 2},
    @ts.take({'head' => 1, 'tail' => 2}, 0))
    end

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

  • Assignee changed from seki (Masatoshi Seki) to nagachika (Tomoyuki Chikanaga)

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

  • Status changed from Open to Assigned

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

  • ruby -v changed from ruby 1.9.4dev (2011-07-26 trunk 32672) [i686-linux] to -

近永と申します。

すみません。そのように思います。
すぐに手を出せないのでどなたか修正していただけないでしょうか。
確認ありがとうございます。
後程やっておきます。

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

近永と申します。

すみません。そのように思います。
すぐに手を出せないのでどなたか修正していただけないでしょうか。
確認ありがとうございます。
後程やっておきます。

Actions #5

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r32705.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • test/rinda/test_rinda.rb (test_remote_array_and_hash):
    add local variables to protect objects from GC. [ruby-dev:44253]
    [Bug #5104]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0