summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-14 02:21:53 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-07-14 02:21:53 +0000
commit8f6fed850a08ffbc7aa9abb2a941faa6c47b3a18 (patch)
treeb00df3adbfcaeb56af85574d501371d1e488ba2a
parent5227d61ebf69d646a41d9ae14b9fd41d9d0b5438 (diff)
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--ChangeLog5
-rw-r--r--lib/webrick/utils.rb16
2 files changed, 16 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 97c3441..c55354e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 bde3d01..c6da844 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