From: Hideto ISHIBASHI Date: 2000-08-14T09:34:56+09:00 Subject: [ruby-list:24191] drb.rb: 0x40155740 is recycled object (IndexError) おひさしぶりです。石橋秀仁です。 drb-1.2.1を使っています。たまに drb.rb:166:in `method_missing': 0x40155740 is recycled object (IndexError) と出ますが、これはぼくのスクリプトの問題でしょうか? それともdrbのバグでしょうか? "recycled object"っていうエラーはよくわからないのですが、 すでにGCされたオブジェクトを ObjectSpace._id2ref(id) した場合に出るのでしょうか? 問題のスクリプトは何をしているかというと、 queueに入れたオブジェクトを、しばらくしてからpopしています。 そのものはいま出せないので、それに近いのを出します。 以下の実験では、 2# 3# (以下略) となっています。メモリ上のアドレスが同じです。 GCしたんだから当然といえば当然です。 これって意図された動作で、かついつでも問題無いのですか? どなたかお知恵を拝借できれば有難いです。 [hideto@typhoon tmp] cat svr.rb require 'thread' require 'drb/drb' here = 'druby://localhost:17640' queue = Queue.new class Person; end 10.times { |i| queue.push([i, Person.new]) } DRb.start_service(here, queue) DRb.thread.join [hideto@typhoon tmp] cat clnt.rb require 'drb/drb' there = 'druby://localhost:17640' DRb.start_service(nil) class Person; end queue = DRbObject.new(nil, there) while sleep(5) print queue.pop, "\n" GC.start end [hideto@typhoon tmp] ruby svr.rb & [1] 16714 [hideto@typhoon tmp] ruby clnt.rb 0# 1# 2# 3# 4# 5# 6# 7# 8# 9# clnt.rb:8:in `sleep': Interrupt from clnt.rb:8 [hideto@typhoon tmp] -- Hideto "rubyholic" ISHIBASHI http://www.rr.iij4u.or.jp/~hideto-i/ blade clone: http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/index.html