ff743ce862
Currently it's possible for next and yield to be called out of sequence, which will result in surprising behavior due to the implementation. Because we blindly coroswitch between goroutines, calling next from the iterator, or yield from the calling goroutine, will actually switch back to the other goroutine. In the case of next, we'll switch back with a stale (or zero) value: the results are basically garbage. In the case of yield, we're switching back to the *same* goroutine, which will crash in the runtime. This change adds a single bool to ensure that next and yield are always called in sequence. That is, every next must always be paired with a yield before continuing. This restricts what can be done with Pull, but prevents observing some truly strange behaviors that the user of Pull likely did not intend, or can't easily predict. Change-Id: I6f72461f49c5635d6914bc5b968ad6970cd3c734 Reviewed-on: https://go-review.googlesource.com/c/go/+/583676 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Russ Cox <rsc@golang.org> |
||
---|---|---|
.github | ||
api | ||
doc | ||
lib/time | ||
misc | ||
src | ||
test | ||
.gitattributes | ||
.gitignore | ||
codereview.cfg | ||
CONTRIBUTING.md | ||
go.env | ||
LICENSE | ||
PATENTS | ||
README.md | ||
SECURITY.md |
The Go Programming Language
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 4.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.
Download and Install
Binary Distributions
Official binary distributions are available at https://go.dev/dl/.
After downloading a binary release, visit https://go.dev/doc/install for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://go.dev/doc/install/source for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines at https://go.dev/doc/contribute.
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://go.dev/wiki/Questions for a list of places to ask questions about the Go language.