mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix NetBSD CPU spin in lwp_park when CPU profiling is active
Fixes #22981 Change-Id: I449eb7b5e022401e80a3ab138063e2f4499fbdf8 Reviewed-on: https://go-review.googlesource.com/81855 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
9d70b3ae04
commit
2ff2eab0d2
1 changed files with 10 additions and 1 deletions
|
|
@ -122,8 +122,8 @@ func semasleep(ns int64) int32 {
|
|||
|
||||
// Compute sleep deadline.
|
||||
var tsp *timespec
|
||||
var ts timespec
|
||||
if ns >= 0 {
|
||||
var ts timespec
|
||||
var nsec int32
|
||||
ts.set_sec(timediv(ns, 1000000000, &nsec))
|
||||
ts.set_nsec(nsec)
|
||||
|
|
@ -143,6 +143,15 @@ func semasleep(ns int64) int32 {
|
|||
ret := lwp_park(_CLOCK_MONOTONIC, _TIMER_RELTIME, tsp, 0, unsafe.Pointer(&_g_.m.waitsemacount), nil)
|
||||
if ret == _ETIMEDOUT {
|
||||
return -1
|
||||
} else if ret == _EINTR && ns >= 0 {
|
||||
// Avoid sleeping forever if we keep getting
|
||||
// interrupted (for example by the profiling
|
||||
// timer). It would be if tsp upon return had the
|
||||
// remaining time to sleep, but this is good enough.
|
||||
var nsec int32
|
||||
ns /= 2
|
||||
ts.set_sec(timediv(ns, 1000000000, &nsec))
|
||||
ts.set_nsec(nsec)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue