From: Masatoshi SEKI Date: 2000-08-16T02:47:40+09:00 Subject: [ruby-list:24223] Re: drb.rb: 0x40155740 is recycled object(IndexError) 咳といいます。 > 同じエラーを再現するミニマムなスクリプト(svr.rb, clnt.rb) > を添付します。それぞれ別のターミナルで実行します。 ああ、私も書いてしまった。 > drbのオプションとしてそういう機能があるとうれしいです。 > 設定されたタイムアウト時間だけは参照を保持する機能(下記)。 ああ、私も書いてしまった。 > IDに依らない参照ではありませんが、DRbIdConvに差し替えによって、 > 上述の「時限付き参照表」を作れますね。書いたので添付します > (drb_ref_id_conv.rb)。"recycled object"エラーは出ません。 ふむふむ。 ちょうど手持ちの汎用「時限付きCollection」をパックして、 そのサンプルとして TimerIdConv というのを入れるところでした。 スクリプト自体もほぼ同じ機能だと思います。 http://www2a.biglobe.ne.jp/~seki/ruby/timerholder-1.0b1.tar.gz これに入ってる holders.rb と holderc.rb で実験できます。 % ruby holders.rb druby://yourhost:1234 % ruby holderc.rb druby://yourhost:1234 すると失敗して、 % ruby -d holders.rb druby://yourhost:1234 % ruby holderc.rb druby://yourhost:1234 すると保護してくれます。 > これを使ってdrbを書き換えると、実際にリモートで参 > 照されている期間中だけGCされないようになります。 > 「タイムアウト」までの無駄な保持期間をなくせると思うので、 > 検討してみてください。>咳さん えっと、これはどういうことですか ? 実際にリモートで参照している期間を知ることができるのですか? 参照されたオブジェクトが「サーバ側が約束した期間だけは存在する」という 作戦かと思ったのですが別の件 ?