summaryrefslogtreecommitdiff
path: root/lib/monitor.rb
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-04-02 04:59:43 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-04-02 04:59:43 +0000
commitc5b9600397b1636a398a6a888c8d47749914da7a (patch)
tree9e621de53310f4dc46202b5472eec6b096bda5b5 /lib/monitor.rb
parent6bdaaa7eabe0dc92b26676e24dfaba3ab945f50e (diff)
* lib/monitor.rb (wait): ensure reentrance.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/monitor.rb')
-rw-r--r--lib/monitor.rb21
1 files changed, 10 insertions, 11 deletions
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