From bae53daa72bf2734acbb648b783752fbd00e357c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 23 Feb 2017 15:13:25 -0500 Subject: [PATCH] [release-branch.go1.8] runtime: avoid O(n) semaphore list walk in contention profiling Contention profiling is off by default. If you turn it on, it has the unfortunate effect of making the wakeup on a contention mutex go from O(1) to O(n). Change it back to O(1). This is already fixed in essentially the same way on master; master also contains some fixes for the non-profiling code paths. Possible for Go 1.8.1. Change-Id: Iaa644c06e20ca28da4dfa348b7211eedb657e0ba Reviewed-on: https://go-review.googlesource.com/37341 Run-TryBot: Russ Cox TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/runtime/sema.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/sema.go b/src/runtime/sema.go index 576a1fb7a2..37318ff9d5 100644 --- a/src/runtime/sema.go +++ b/src/runtime/sema.go @@ -171,6 +171,7 @@ func semrelease(addr *uint32) { for x := root.head; x != nil; x = x.next { if x.elem == unsafe.Pointer(addr) { x.acquiretime = t0 + break } } mutexevent(t0-s.acquiretime, 3) -- 2.50.0