aboutsummaryrefslogtreecommitdiff
path: root/src/os/exec
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2024-06-03 21:00:51 +0000
committerMichael Knyszek <mknyszek@google.com>2024-06-07 19:09:28 +0000
commit1634fde4f918223614fd8893db8dd7ca4ebcda01 (patch)
tree75eb187216f3b5f8f93ca20e5e24d3b1624ce394 /src/os/exec
parent9d2aeae72d34880510c7221f35ab61171cec1ffd (diff)
downloadgo-1634fde4f918223614fd8893db8dd7ca4ebcda01.tar.xz
iter: don't iterate if stop is called before next on Pull
Consider the following code snippet: next, stop := iter.Pull(seq) stop() Today, seq will iterate exactly once before it notices that its iteration is invalid to begin with. This effect is observable in a variety of ways. For example, if the iterator panics, since that panic must propagate to the caller of stop. But if the iterator is stateful in anyway, then it may update some state. This is somewhat unexpected and because it's observable, can be depended upon. This behavior does not align well with other possible implementations of Pull, like CPS performed by the compiler. It's also just odd to let even one iteration happen, precisely because of unexpected state modification. Fix this by not iterating at all of the done flag is set before entering the iterator. For #67712. Change-Id: I18162e29df45a2e8968f68379450d92e1de47c4d Reviewed-on: https://go-review.googlesource.com/c/go/+/590075 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Austin Clements <austin@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/os/exec')
0 files changed, 0 insertions, 0 deletions