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 | 1fc0c08694510e56672bcd5f6a044538467811be (patch) | |
tree | 2b5e0f902bd7cd2e26b0816a37e31a27866e1d08 /lib/webrick/utils.rb | |
parent | 34d420acc405366e8a24b87c408c2514058a24d2 (diff) |
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
Diffstat (limited to 'lib/webrick/utils.rb')
-rw-r--r-- | lib/webrick/utils.rb | 5 |
1 files changed, 3 insertions, 2 deletions
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{ |