From: Cherry Mui Date: Wed, 4 Aug 2021 23:41:19 +0000 (-0400) Subject: runtime: accept restartable sequence pcdata values in isAsyncSafePoint X-Git-Tag: go1.18beta1~1743 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8ff16c19909e5aecf51c6b993cba36ea51791f34;p=gostls13.git runtime: accept restartable sequence pcdata values in isAsyncSafePoint If the pcdata value indicates a restartable sequence, it is okay to asynchronously preempt (and resume at the restart PC). Accept it in isAsyncSafePoint. Fixes #47530. Change-Id: I419225717c8eee5812f3235338262da5895aad0d Reviewed-on: https://go-review.googlesource.com/c/go/+/340011 Trust: Cherry Mui Run-TryBot: Cherry Mui Reviewed-by: Joel Sing Reviewed-by: Austin Clements --- diff --git a/src/runtime/preempt.go b/src/runtime/preempt.go index a38ab79398..334bac779e 100644 --- a/src/runtime/preempt.go +++ b/src/runtime/preempt.go @@ -399,7 +399,7 @@ func isAsyncSafePoint(gp *g, pc, sp, lr uintptr) (bool, uintptr) { return false, 0 } up, startpc := pcdatavalue2(f, _PCDATA_UnsafePoint, pc) - if up != _PCDATA_UnsafePointSafe { + if up == _PCDATA_UnsafePointUnsafe { // Unsafe-point marked by compiler. This includes // atomic sequences (e.g., write barrier) and nosplit // functions (except at calls).