mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[release-branch.go1.9] runtime: avoid monotonic time zero on systems with low-res timers
Otherwise low-res timers cause problems at call sites that expect to be able to use 0 as meaning "no time set" and therefore expect that nanotime never returns 0 itself. For example, sched.lastpoll == 0 means no last poll. Fixes #22394. Change-Id: Iea28acfddfff6f46bc90f041ec173e0fea591285 Reviewed-on: https://go-review.googlesource.com/73410 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-on: https://go-review.googlesource.com/73491 TryBot-Result: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
8bb333a9c0
commit
9be38a15e4
2 changed files with 10 additions and 1 deletions
|
|
@ -142,6 +142,9 @@ func main() {
|
|||
}
|
||||
|
||||
runtime_init() // must be before defer
|
||||
if nanotime() == 0 {
|
||||
throw("nanotime returning zero")
|
||||
}
|
||||
|
||||
// Defer unlock so that runtime.Goexit during init does the unlock too.
|
||||
needUnlock := true
|
||||
|
|
|
|||
|
|
@ -309,4 +309,10 @@ func time_runtimeNano() int64 {
|
|||
return nanotime()
|
||||
}
|
||||
|
||||
var startNano int64 = nanotime()
|
||||
// Monotonic times are reported as offsets from startNano.
|
||||
// We initialize startNano to nanotime() - 1 so that on systems where
|
||||
// monotonic time resolution is fairly low (e.g. Windows 2008
|
||||
// which appears to have a default resolution of 15ms),
|
||||
// we avoid ever reporting a nanotime of 0.
|
||||
// (Callers may want to use 0 as "time not set".)
|
||||
var startNano int64 = nanotime() - 1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue