From 7c8d82e92be894fe02b1a0bee775cf803c6849c1 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Sat, 24 Oct 2020 16:34:12 -0400 Subject: [PATCH] runtime: always enable async preemption on darwin/arm64 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 Reviewed-by: Austin Clements Reviewed-by: Ian Lance Taylor --- src/runtime/signal_unix.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go index bf4a319b37..6aad079f03 100644 --- a/src/runtime/signal_unix.go +++ b/src/runtime/signal_unix.go @@ -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" { -- 2.50.0