From: Russ Cox Date: Thu, 23 Feb 2017 20:13:25 +0000 (-0500) Subject: [release-branch.go1.8] runtime: avoid O(n) semaphore list walk in contention profiling X-Git-Tag: go1.8.1~35 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bae53daa72bf2734acbb648b783752fbd00e357c;p=gostls13.git [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 --- 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)