]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: always enable async preemption on darwin/arm64
authorCherry Zhang <cherryyz@google.com>
Sat, 24 Oct 2020 20:34:12 +0000 (16:34 -0400)
committerCherry Zhang <cherryyz@google.com>
Wed, 28 Oct 2020 14:00:36 +0000 (14:00 +0000)
Now that we have the G register saved, we can enable asynchronous
preemption for pure Go programs on darwin/arm64.

Updates #38485, #36365.

Change-Id: Ic654fa4dce369efe289b38d59cf1a184b358fe9e
Reviewed-on: https://go-review.googlesource.com/c/go/+/265120
Trust: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/signal_unix.go

index bf4a319b37a7d8d0afdb837c8a97b82352d77fbb..6aad079f038868bcc8ccbb7ccaf515b6ca637bc2 100644 (file)
@@ -350,17 +350,6 @@ const preemptMSupported = true
 // safe-point, it will preempt the goroutine. It always atomically
 // increments mp.preemptGen after handling a preemption request.
 func preemptM(mp *m) {
-       if (GOOS == "darwin" || GOOS == "ios") && GOARCH == "arm64" && !iscgo {
-               // On darwin, we use libc calls, and cgo is required on ARM64
-               // so we have TLS set up to save/restore G during C calls. If cgo is
-               // absent, we cannot save/restore G in TLS, and if a signal is
-               // received during C execution we cannot get the G. Therefore don't
-               // send signals.
-               // This can only happen in the go_bootstrap program (otherwise cgo is
-               // required).
-               return
-       }
-
        // On Darwin, don't try to preempt threads during exec.
        // Issue #41702.
        if GOOS == "darwin" {