From: Masatoshi SEKI Date: 2012-04-22T19:52:17+09:00 Subject: [ruby-dev:45548] Re: drb SSL test timeout 咳といいます。 田中さんありがとうございます。 On 2012/04/22, at 12:31, Tanaka Akira wrote: > > そして、Process.detach が生成するスレッドのスレッド変数に > サービスの名前を入れておいて、後から識別できるようにします。 > 現在のテストでは問題ないのですが一般には ExtServManager に複数の > インスタンスがありうるような気もするので、 > ここはサービスの名前だけじゃなくて、 > ExtServManager のインスタンスも入れておいたほうがいいかもしれません。 testスクリプトをポータブルにする過程で生まれたもので おそらく誰も使ってないと思います(私も使い途をやっと思い出した)から、 気にしなくていい気がします。 > > あとは、setup で @service_name にサービスの名前を保存しておいて、 > teardown で Thread.list から探し出して kill しています。 > あと、teardown では DRbService.manager.unregist も呼び出してつじつまを > 合わせます。 > > いかがでしょうか。 ありがとうございます。 私はこれでcommitしてよいように思います。 あ。もしかして @extから名前が知れたら(@ext.name で辿れたら)、 @service_name は要らないでしょうか? Index: extserv.rb =================================================================== --- extserv.rb (revision 35416) +++ extserv.rb (working copy) @@ -20,7 +20,7 @@ @invoker = ro.regist(name, DRbObject.new(self, @server.uri)) end end - attr_reader :server + attr_reader :server, :name def front DRbObject.new(nil, @server.uri) そうではなく、そもそもその失敗のときには@extがnilなのかしら。 > > % svn diff --diff-cmd diff -x '-u -p' > Index: lib/drb/extservm.rb > =================================================================== > --- lib/drb/extservm.rb (revision 35422) > +++ lib/drb/extservm.rb (working copy) > @@ -79,7 +79,15 @@ module DRb > @servers[name] = false > end > uri = @uri || DRb.uri > - Process.detach spawn("#{command} #{uri} #{name}") > + if command.respond_to? :to_ary > + command = command.to_ary + [uri, name] > + pid = spawn(*command) > + else > + pid = spawn("#{command} #{uri} #{name}") > + end > + th = Process.detach(pid) > + th[:drb_service] = name > + th > end > end > end > Index: test/drb/test_drbunix.rb > =================================================================== > --- test/drb/test_drbunix.rb (revision 35422) > +++ test/drb/test_drbunix.rb (working copy) > @@ -20,7 +20,8 @@ end > class TestDRbUNIXCore < Test::Unit::TestCase > include DRbCore > def setup > - @ext = DRbUNIXService.ext_service('ut_drb_drbunix.rb') > + @service_name = 'ut_drb_drbunix.rb' > + @ext = DRbUNIXService.ext_service(@service_name) > @there = @ext.front > end > > @@ -37,7 +38,8 @@ end > class TestDRbUNIXAry < Test::Unit::TestCase > include DRbAry > def setup > - @ext = DRbUNIXService.ext_service('ut_array_drbunix.rb') > + @service_name = 'ut_array_drbunix.rb' > + @ext = DRbUNIXService.ext_service(@service_name) > @there = @ext.front > end > end > Index: test/drb/test_drbssl.rb > =================================================================== > --- test/drb/test_drbssl.rb (revision 35422) > +++ test/drb/test_drbssl.rb (working copy) > @@ -36,7 +36,8 @@ end > class TestDRbSSLCore < Test::Unit::TestCase > include DRbCore > def setup > - @ext = DRbSSLService.ext_service('ut_drb_drbssl.rb') > + @service_name = 'ut_drb_drbssl.rb' > + @ext = DRbSSLService.ext_service(@service_name) > @there = @ext.front > end > > @@ -53,7 +54,8 @@ end > class TestDRbSSLAry < Test::Unit::TestCase > include DRbAry > def setup > - @ext = DRbSSLService.ext_service('ut_array_drbssl.rb') > + @service_name = 'ut_array_drbssl.rb' > + @ext = DRbSSLService.ext_service(@service_name) > @there = @ext.front > end > end > Index: test/drb/test_drb.rb > =================================================================== > --- test/drb/test_drb.rb (revision 35422) > +++ test/drb/test_drb.rb (working copy) > @@ -202,7 +202,8 @@ end > > class TestDRbSafe1 < TestDRbAry > def setup > - @ext = DRbService.ext_service('ut_safe1.rb') > + @service_name = 'ut_safe1.rb' > + @ext = DRbService.ext_service(@service_name) > @there = @ext.front > end > end > Index: test/drb/drbtest.rb > =================================================================== > --- test/drb/drbtest.rb (revision 35422) > +++ test/drb/drbtest.rb (working copy) > @@ -11,7 +11,7 @@ class DRbService > @@ruby += " -d" if $DEBUG > def self.add_service_command(nm) > dir = File.dirname(File.expand_path(__FILE__)) > - DRb::ExtServManager.command[nm] = "#{@@ruby} \"#{dir}/#{nm}\"" > + DRb::ExtServManager.command[nm] = [@@ruby, "#{dir}/#{nm}"] > end > > %w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb > ut_eval.rb ut_eq.rb).each do |nm| > @@ -65,12 +65,20 @@ end > > module DRbCore > def setup > - @ext = DRbService.ext_service('ut_drb.rb') > + @service_name = 'ut_drb.rb' > + @ext = DRbService.ext_service(@service_name) > @there = @ext.front > end > > def teardown > @ext.stop_service if @ext > + DRbService.manager.unregist(@service_name) > + Thread.list.each {|th| > + if th.respond_to?(:pid) && th[:drb_service] == @service_name > + Process.kill :TERM, th.pid > + th.join > + end > + } > end > > def test_00_DRbObject > @@ -271,12 +279,20 @@ end > > module DRbAry > def setup > - @ext = DRbService.ext_service('ut_array.rb') > + @service_name = 'ut_array.rb' > + @ext = DRbService.ext_service(@service_name) > @there = @ext.front > end > > def teardown > @ext.stop_service if @ext > + DRbService.manager.unregist(@service_name) > + Thread.list.each {|th| > + if th.respond_to?(:pid) && th[:drb_service] == @service_name > + Process.kill :TERM, th.pid > + th.join > + end > + } > end > > def test_01 > > -- > [田中 哲][たなか あきら][Tanaka Akira] >