diff options
author | Cherry Mui <cherryyz@google.com> | 2021-08-04 19:41:19 -0400 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2021-08-16 23:32:14 +0000 |
commit | 8ff16c19909e5aecf51c6b993cba36ea51791f34 (patch) | |
tree | 0a2fa62f17fe95a05448a980074feb65625cdde5 /src/runtime | |
parent | df9c5d8f5dc96977dad865dc531d6c1e665ea1cb (diff) | |
download | go-8ff16c19909e5aecf51c6b993cba36ea51791f34.tar.gz go-8ff16c19909e5aecf51c6b993cba36ea51791f34.zip |
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 <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime')
-rw-r--r-- | src/runtime/preempt.go | 2 |
1 files changed, 1 insertions, 1 deletions
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). |