aboutsummaryrefslogtreecommitdiff
path: root/src/os/exec/exec_test.go
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/exec_test.go
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/exec_test.go')
0 files changed, 0 insertions, 0 deletions