From: KOSAKI Motohiro Date: 2012-11-13T17:43:48+09:00 Subject: [ruby-dev:46508] Re: トラップハンドラで許されない操作はなにか >>> def trap(sig, &block) # 面倒なので cmd は略 >>> if block >>> @@trap_handlers[sig] = block >>> @@signal_thread = Thread.new{ >>> until @@trap_handlers.empty? >>> sig = sigwait() >>> begin >>> @@trap_handlers[sig].call(sig) >>> rescue CheckTrapHandler >>> # ignore >>> rescue Exception => e >>> main_thread.kill(e) >>> end >>> end >>> } >>> end unless @@signal_thread >>> else >>> @@trap_handlers.delete(sig) >>> @@signal_thread.raise(CheckTrapHandler) if @@signal_thread >>> end >>> end >>> >>> >>>  半年くらい早くからこの議論をしていれば,こんなふうに変えるとすっきりし >>> たんじゃないかと思います.2.0.0 ではどうしますかねぇ. > >  実装もこんな感じで同意でしょうか. > >  もう,いっそいろいろ面倒なんで,変えちゃう? 遠藤さんが ok っていった > ら変えてもよさそうだが,ちょっと大きすぎるかなぁ. トラップハンドラスレッドもタイマースレッドと同じく特別扱いを用意してfork safeにするという改造が許されるなら、この案でも僕は異論ありません