]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: accept timeout from non-timeout semaphore wait on OS X
authorRuss Cox <rsc@golang.org>
Tue, 25 Oct 2016 00:47:31 +0000 (20:47 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 25 Oct 2016 02:51:04 +0000 (02:51 +0000)
Looking at the kernel sources, I don't see how this is possible.
But obviously it is. Just try again.

Fixes #17161.

Change-Id: Iea7d53f7cf75944792d2f75a0d07129831c7bcdb
Reviewed-on: https://go-review.googlesource.com/31823
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/os_darwin.go

index fa5aca2f99763e09f05dbc76da8812f17088e4b4..0dfe8778db39da0b8792f662699b023da69372b9 100644 (file)
@@ -414,7 +414,10 @@ func semasleep1(ns int64) int32 {
                if r == 0 {
                        break
                }
-               if r == _KERN_ABORTED { // interrupted
+               // Note: We don't know how this call (with no timeout) can get _KERN_OPERATION_TIMED_OUT,
+               // but it does reliably, though at a very low rate, on OS X 10.8, 10.9, 10.10, and 10.11.
+               // See golang.org/issue/17161.
+               if r == _KERN_ABORTED || r == _KERN_OPERATION_TIMED_OUT { // interrupted
                        continue
                }
                macherror(r, "semaphore_wait")