* lib/thread.rb (Queue::pop): get rid of race condition.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2002-06-06 02:43:02 +00:00
Родитель 6956135b4b
Коммит d760f97172
2 изменённых файлов: 11 добавлений и 15 удалений

Просмотреть файл

@ -1,3 +1,7 @@
Thu Jun 6 11:42:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* lib/thread.rb (Queue::pop): get rid of race condition.
Tue Jun 4 18:28:37 2002 WATANABE Hirofumi <eban@ruby-lang.org>
* ext/socket/extconf.rb: The IPv6 stack of Cygwin is still incomplete.

Просмотреть файл

@ -173,22 +173,14 @@ class Queue
alias enq push
def pop(non_block=false)
Thread.critical = true
begin
loop do
if @que.empty?
if non_block
raise ThreadError, "queue empty"
end
@waiting.push Thread.current
Thread.stop
else
return @que.shift
end
end
ensure
Thread.critical = false
while (Thread.critical = true; @que.empty?)
raise ThreadError, "queue empty" if non_block
@waiting.push Thread.current
Thread.stop
end
@que.shift
ensure
Thread.critical = false
end
alias shift pop
alias deq pop