mirror of https://github.com/golang/go.git
os: fix aliasing bug in RemoveAllTestHook restoration
The code to swap RemoveAllTestHook in and out in TestRemoveAllWithMoreErrorThanReqSize was making a copy of the RemoveAllTestHook pointer, then attempting to restore by loading from the copy of that pointer. Since the two copies of the pointer aliased the same address, the restore operation had no effect, and any RemoveAll tests that happened to run after TestRemoveAllWithMoreErrorThanReqSize would fail. Fixes #31421 Change-Id: I7028475f5ceb3b0a2fa69d22af8d3379508c4531 Reviewed-on: https://go-review.googlesource.com/c/go/+/171777 Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
8d86ef2216
commit
2ebdb5ec06
|
|
@ -412,13 +412,14 @@ func TestRemoveAllWithMoreErrorThanReqSize(t *testing.T) {
|
|||
if testing.Short() {
|
||||
t.Skip("skipping in short mode")
|
||||
}
|
||||
oldRemoveAllTestHook := RemoveAllTestHook
|
||||
|
||||
defer func(oldHook func(error) error) {
|
||||
*RemoveAllTestHook = oldHook
|
||||
}(*RemoveAllTestHook)
|
||||
|
||||
*RemoveAllTestHook = func(err error) error {
|
||||
return errors.New("error from RemoveAllTestHook")
|
||||
}
|
||||
defer func() {
|
||||
*RemoveAllTestHook = *oldRemoveAllTestHook
|
||||
}()
|
||||
|
||||
tmpDir, err := ioutil.TempDir("", "TestRemoveAll-")
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in New Issue