webrick/utils.rb: adaptive sleep

* lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
  make sleep intervals adaptive than fixed period intervals.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-07-14 02:21:53 +00:00
Родитель 5227d61ebf
Коммит 8f6fed850a
2 изменённых файлов: 16 добавлений и 5 удалений

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

@ -1,4 +1,7 @@
Tue Jul 14 11:20:13 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
Tue Jul 14 11:21:31 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
make sleep intervals adaptive than fixed period intervals.
* lib/webrick/server.rb (WEBrick::GenericServer#start): flush
shutdown pipe.

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

@ -156,15 +156,23 @@ module WEBrick
Thread.start{
while true
now = Time.now
@timeout_info.keys.each{|thread|
ary = @timeout_info[thread]
wakeup = nil
@timeout_info.each {|thread, ary|
next unless ary
ary.dup.each{|info|
time, exception = *info
interrupt(thread, info.object_id, exception) if time < now
if time < now
interrupt(thread, info.object_id, exception)
elsif !wakeup || time < wakeup
wakeup = time
end
}
}
sleep 0.5
if !wakeup
sleep
elsif (wakeup -= now) > 0
sleep(wakeup)
end
end
}
end