diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-14 01:48:52 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-14 01:48:52 +0000 |
commit | e51c6e57047bec18b0e844f1bf13026c87114ddf (patch) | |
tree | 2b5e0f902bd7cd2e26b0816a37e31a27866e1d08 | |
parent | ce52ba9f3f920f4b5eb366dbc2e94f49e7333220 (diff) | |
download | ruby-e51c6e57047bec18b0e844f1bf13026c87114ddf.tar.gz |
webrick: use monotonic clock for timeouts
The monotonic clock is immune to system time changes and
a better option for implementing timing comparisons.
* lib/webrick/utils.rb (TimeoutHandler): use monotonic clock
(watch): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56417 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/webrick/utils.rb | 5 |
2 files changed, 8 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Fri Oct 14 10:48:37 2016 Eric Wong <e@80x24.org> + + * lib/webrick/utils.rb (TimeoutHandler): use monotonic clock + (watch): ditto + Thu Oct 13 19:41:32 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> * io.c (copy_stream_body): use IO to write to copy to duplex IO. diff --git a/lib/webrick/utils.rb b/lib/webrick/utils.rb index eb3b907ecf..8b34b6654f 100644 --- a/lib/webrick/utils.rb +++ b/lib/webrick/utils.rb @@ -134,7 +134,8 @@ module WEBrick # +time+:: Timeout in seconds # +exception+:: Exception to raise when timeout elapsed def TimeoutHandler.register(seconds, exception) - instance.register(Thread.current, Time.now + seconds, exception) + at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + seconds + instance.register(Thread.current, at, exception) end ## @@ -163,7 +164,7 @@ module WEBrick def watch to_interrupt = [] while true - now = Time.now + now = Process.clock_gettime(Process::CLOCK_MONOTONIC) wakeup = nil to_interrupt.clear TimeoutMutex.synchronize{ |