Commit 7e62316b authored by Keith Randall's avatar Keith Randall

runtime: test Goexit/defer iteraction.

Make sure Goexit runs defers.
Make sure recover() during a Goexit defer returns nil.

LGTM=dvyukov, bradfitz
R=golang-codereviews, dvyukov, bradfitz, khr
CC=golang-codereviews
https://golang.org/cl/140650043
parent 1e4f86e4
...@@ -159,6 +159,22 @@ func TestGoexitCrash(t *testing.T) { ...@@ -159,6 +159,22 @@ func TestGoexitCrash(t *testing.T) {
} }
} }
func TestGoexitDefer(t *testing.T) {
c := make(chan struct{})
go func() {
defer func() {
r := recover()
if r != nil {
t.Errorf("non-nil recover during Goexit")
}
c <- struct{}{}
}()
runtime.Goexit()
}()
// Note: if the defer fails to run, we will get a deadlock here
<-c
}
func TestGoNil(t *testing.T) { func TestGoNil(t *testing.T) {
output := executeTest(t, goNilSource, nil) output := executeTest(t, goNilSource, nil)
want := "go of nil func value" want := "go of nil func value"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment