1
0
mirror of https://github.com/golang/go synced 2024-11-23 14:40:02 -07:00

testing: restore os.Exit(0) after every call to (*M).Run

cmd/go.TestScript/test_main_twice demonstrates a program that invokes
(*M).Run twice in a row. If we only restore os.Exit(0) in m.afterOnce,
we will fail to restore it after the second run and fail the test
process despite both runs passing.

Updates #29062
Updates #23129

Change-Id: Id22ec68f1708e4583c8dda14a8ba0efae7178b85
Reviewed-on: https://go-review.googlesource.com/c/go/+/251262
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Bryan C. Mills 2020-08-27 21:30:24 -04:00
parent 26ad27bb02
commit 18ea6f597c

View File

@ -1533,11 +1533,15 @@ func (m *M) before() {
// after runs after all testing. // after runs after all testing.
func (m *M) after() { func (m *M) after() {
m.afterOnce.Do(func() { m.afterOnce.Do(func() {
m.writeProfiles()
})
// Restore PanicOnExit0 after every run, because we set it to true before
// every run. Otherwise, if m.Run is called multiple times the behavior of
// os.Exit(0) will not be restored after the second run.
if *panicOnExit0 { if *panicOnExit0 {
m.deps.SetPanicOnExit0(false) m.deps.SetPanicOnExit0(false)
} }
m.writeProfiles()
})
} }
func (m *M) writeProfiles() { func (m *M) writeProfiles() {