From: "akira yamada / やまだあきら" Date: 2008-09-10T10:26:29+09:00 Subject: [ruby-dev:36238] Re: [Bug #554] Sync_m#sync_try_lockの引数が無視されている 石塚圭樹 さんは書きました: >> http://rubyforge.org/tracker/index.php?func=detail&aid=11680&group_id=426&atid=1700 > その通りです. > チェックインの方お願いしてしまってよろしいでしょうか? trunkにcommitしました。 ruby_1_8のほうはよく見るとFailを呼ぶ前に Thread.critical=false としているところがあるのですが、 Failの中ですべて Thread.critical=false にしてしまってもよいでしょうか。 もしそうだとすると、こうですかね?: --- lib/sync.rb (リビジョン 19264) +++ lib/sync.rb (作業コピー) @@ -54,6 +54,7 @@ # exceptions class Err < StandardError def Err.Fail(*opt) + Thread.critical = false fail self, sprintf(self::Message, *opt) end @@ -129,10 +130,10 @@ # locking methods. def sync_try_lock(mode = EX) - return unlock if sync_mode == UN + return unlock if mode == UN Thread.critical = true - ret = sync_try_lock_sub(sync_mode) + ret = sync_try_lock_sub(mode) Thread.critical = false ret end @@ -156,7 +157,6 @@ def sync_unlock(m = EX) Thread.critical = true if sync_mode == UN - Thread.critical = false Err::UnknownLocker.Fail(Thread.current) end @@ -165,7 +165,6 @@ runnable = false case m when UN - Thread.critical = false Err::UnknownLocker.Fail(Thread.current) when EX @@ -291,7 +290,6 @@ ret = false end else - Thread.critical = false Err::LockModeFailer.Fail mode end return ret -- やまだ