[#45518] [ruby-trunk - Bug #6302][Open] irb で math-mode 中でも conf.math_mode に nil を代入すると math-mode を抜ける事ができる — "sho-h (Sho Hashimoto)" <sho-h@...>
5 messages
2012/04/15
[#45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
12 messages
2012/04/17
[#45533] Re: [ruby-cvs:42559] naruse:r35383 (trunk): Revert r35339-35343 because of no tests. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
6 messages
2012/04/18
[#45534] Re: [ruby-cvs:42559] naruse:r35383 (trunk): Revert r35339-35343 because of no tests.
— Hiroshi Nakamura <nahi@...>
2012/04/18
(2012/04/19 2:02), Yukihiro Matsumoto wrote:
[#45535] Re: [ruby-cvs:42559] naruse:r35383 (trunk): Revert r35339-35343 because of no tests.
— "NARUSE, Yui" <naruse@...>
2012/04/19
2012年4月19日6:10 Hiroshi Nakamura <[email protected]>:
[#45541] drb SSL test timeout — Tanaka Akira <akr@...>
Debian wheezy において、test_drbssl.rb のテストで 100秒の timeout にひっかかります。
10 messages
2012/04/21
[#45542] Re: drb SSL test timeout
— Masatoshi SEKI <m_seki@...>
2012/04/21
咳といいます。
[#45547] Re: drb SSL test timeout
— Tanaka Akira <akr@...>
2012/04/22
2012年4月22日6:52 Masatoshi SEKI <[email protected]>:
[#45548] Re: drb SSL test timeout
— Masatoshi SEKI <m_seki@...>
2012/04/22
咳といいます。
[#45571] [ruby-trunk - Feature #6349][Open] Iconv の復活を希望します — "kyanagi (Kouhei Yanagita)" <redmine@...>
7 messages
2012/04/24
[#45572] Re: [ruby-dev:45571] [ruby-trunk - Feature #6349][Open] Iconv の復活を希望します
— "Martin J. Dürst" <duerst@...>
2012/04/24
やなぎたさん、こんにちは。
[ruby-dev:45547] Re: drb SSL test timeout
From:
Tanaka Akira <akr@...>
Date:
2012-04-22 03:31:47 UTC
List:
ruby-dev #45547
2012年4月22日6:52 Masatoshi SEKI <[email protected]>: >> あとこの変更では、プロセスが残るのはそのままです。 >> drb が起動したプロセス (あるいは Process.detach が返したスレッド) を覚えていてくれると >> kill できるような気がするんですが、どうでしょうか。 > > すみません。どうしたらいいか考えます。 drb 側で覚えておいてもらわなくても、 Process.detach が生成するスレッドを Thread.list から探せば 対処できるのではないか、と思いついたのでやってみました。 まず、kill するときに、/bin/sh だけを kill してしまわないよう、 spawn に渡すのは配列でコマンドを渡して /bin/sh を経由しないようにします。 このために DRb::ExtServManager.command の形式を拡張して、 ハッシュの値に配列も受け入れることになります。 そして、Process.detach が生成するスレッドのスレッド変数に サービスの名前を入れておいて、後から識別できるようにします。 現在のテストでは問題ないのですが一般には ExtServManager に複数の インスタンスがありうるような気もするので、 ここはサービスの名前だけじゃなくて、 ExtServManager のインスタンスも入れておいたほうがいいかもしれません。 あとは、setup で @service_name にサービスの名前を保存しておいて、 teardown で Thread.list から探し出して kill しています。 あと、teardown では DRbService.manager.unregist も呼び出してつじつまを 合わせます。 いかがでしょうか。 % 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]