commit | c53b2bdb35c5339df35b53c8fbf34e5cbede081f | [log] [tgz] |
---|---|---|
author | Cherry Zhang <cherryyz@google.com> | Mon May 18 14:14:11 2020 -0400 |
committer | Cherry Zhang <cherryyz@google.com> | Thu May 21 14:31:36 2020 +0000 |
tree | e86ff517614a7b8fae5447b82fcbab159acc4ce7 | |
parent | 567556d78657326c99b8fa84ec2a5ee511a0941b [diff] |
runtime: add a barrier after a new span is allocated When copying a stack, we 1. allocate a new stack, 2. adjust pointers pointing to the old stack to pointing to the new stack. If the GC is running on another thread concurrently, on a machine with weak memory model, the GC could observe the adjusted pointer (e.g. through gp._defer which could be a special heap-to-stack pointer), but not observe the publish of the new stack span. In this case, the GC will see the adjusted pointer pointing to an unallocated span, and throw. Fixing this by adding a publication barrier between the allocation of the span and adjusting pointers. One testcase for this is TestDeferHeapAndStack in long mode. It fails reliably on linux-mips64le-mengzhuo builder without the fix, and passes reliably after the fix. Fixes #35541. Change-Id: I82b09b824fdf14be7336a9ee853f56dec1b13b90 Reviewed-on: https://go-review.googlesource.com/c/go/+/234478 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.