diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-14 02:21:53 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-07-14 02:21:53 +0000 |
commit | 1cacdd4686259e1cf0059b2210882a32268d1360 (patch) | |
tree | b00df3adbfcaeb56af85574d501371d1e488ba2a | |
parent | 30e3795c71f832d08bd656983444c3711c20e0ba (diff) | |
download | ruby-1cacdd4686259e1cf0059b2210882a32268d1360.tar.gz |
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
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/webrick/utils.rb | 16 |
2 files changed, 16 insertions, 5 deletions
@@ -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. diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb index bde3d01ca5..c6da8449df 100644 --- a/lib/webrick/utils.rb +++ b/lib/webrick/utils.rb @@ -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 |