mirror of
https://github.com/golang/go.git
synced 2025-10-19 11:03:18 +00:00
runtime: avoid overflow in mutex delay calculation
If cputicks is in the top quarter of the int64's range, adding two values together will overflow and confuse the subsequent calculations, leading to zero-duration contention events in the profile. This fixes the TestRuntimeLockMetricsAndProfile failures on the linux-s390x builder. Change-Id: Icb814c39a8702379dfd71c06a53b2618e3589e07 Reviewed-on: https://go-review.googlesource.com/c/go/+/671115 Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Rhys Hiltner <rhys.hiltner@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
60d3bcdec3
commit
ac645eaa0e
1 changed files with 1 additions and 1 deletions
|
@ -404,7 +404,7 @@ useStackLock:
|
|||
n++
|
||||
next := node.mWaitList.next.ptr()
|
||||
if next == nil {
|
||||
cycles := endTicks - (head.mWaitList.startTicks+node.mWaitList.startTicks)/2
|
||||
cycles := ((endTicks - head.mWaitList.startTicks) + (endTicks - node.mWaitList.startTicks)) / 2
|
||||
node.mWaitList.startTicks = endTicks
|
||||
head.mWaitList.startTicks = endTicks
|
||||
getg().m.mLockProfile.recordUnlock(cycles * int64(n))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue