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>
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 {