From 8eeaf69e52b648ff8d7564cd991db7409a43a941 Mon Sep 17 00:00:00 2001 From: shugo Date: Mon, 2 Apr 2001 04:59:43 +0000 Subject: * lib/monitor.rb (wait): ensure reentrance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/monitor.rb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'lib/monitor.rb') diff --git a/lib/monitor.rb b/lib/monitor.rb index 7cca6e871e..d36546ab6d 100644 --- a/lib/monitor.rb +++ b/lib/monitor.rb @@ -93,21 +93,20 @@ module MonitorMixin rescue Timeout @waiters.delete(Thread.current) ensure + Thread.critical = true if timeout && timeout_thread.alive? Thread.kill(timeout_thread) end + while @monitor.mon_owner && + @monitor.mon_owner != Thread.current + @monitor.mon_waiting_queue.push(Thread.current) + Thread.stop + Thread.critical = true + end + @monitor.mon_owner = Thread.current + @monitor.mon_count = count + Thread.critical = false end - - Thread.critical = true - while @monitor.mon_owner && - @monitor.mon_owner != Thread.current - @monitor.mon_waiting_queue.push(Thread.current) - Thread.stop - Thread.critical = true - end - @monitor.mon_owner = Thread.current - @monitor.mon_count = count - Thread.critical = false end def wait_while -- cgit v1.2.3