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