From: Motohiro KOSAKI <kosaki.motohiro@...> Date: 2011-06-25T09:20:27+09:00 Subject: [ruby-dev:43895] [Ruby 1.9 - Bug #4072][Assigned] dRubyで作成したサーバプログラムがsleepしていてもexitしてしまう Issue #4072 has been updated by Motohiro KOSAKI. Status changed from Open to Assigned Assignee set to Yukihiro Matsumoto kosakiです unblock functionはGVL持たずに呼ばれるので、そこがthread stateによって挙動を変えていたら「死ねばいいのに」レベルだと思っています。よってわたし的にはこのパッチはOK。 ただIRCで聞いたところによると mameさんの意識は ruby -e 'trap(:INT) { }; sleep' の時もsleepは解除されるという仕様だったそうです。ここの仕様はまつもとさんに確認 する必要があると思います。 まつもとさん、どう思いますでしょうか? 以下余談。 個人的な感想をいうと、わたしはnagachikaさんの提案している仕様が好きで、 もし、trapでsleep解除という仕様にするなら、現状のシグナルハンドラ実行を契機に sleep解除はよくなくて、trapハンドラ実行を契機にsleep解除されなければ いけないと考えます。 # スクリプトでタイマースレッドはシグナル受信したけど、まだメインスレッドには配送 # されてないので、スクリプトからは不可視。という状況を意識しないといけないのは # コレジャナイ感があります ---------------------------------------- Bug #4072: dRubyで作成したサーバプログラムがsleepしていてもexitしてしまう http://redmine.ruby-lang.org/issues/4072 Author: 三村 益隆 Status: Assigned Priority: Normal Assignee: Yukihiro Matsumoto Category: core Target version: 1.9.2 ruby -v: - =begin ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]にて、 dRubyを以下のようなserverとclient作成し、server->clientを実行すると、 serverプログラムが例外の表示もなくexitします。 ruby 1.9.3dev (2010-11-19 trunk 29830) [x86_64-darwin10.5.0]でも同様に発生します。 ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]では、 exitされないことを確認しております。 https://gist.github.com/706260 * serverプログラム require 'drb' class Hello def hello(message) puts message end end begin DRb.start_service('druby://:12346', Hello.new) puts DRb.uri sleep rescue Object, SystemExit=> e p e.backtrace raise e rescue => e puts e end * clientプログラム require 'drb' d = DRbObject.new_with_uri('druby://m-mimura-4.local:12346') d.hello "message" =end -- http://redmine.ruby-lang.org