blob: 89fe0c9c694251a201866d83cf1757df56224857 [file] [log] [blame]
package tests
import (
"testing"
"time"
)
func inner(ch chan struct{}, b bool) ([]byte, error) {
// ensure gopherjs thinks that this inner function can block
if b {
<-ch
}
return []byte{}, nil
}
// this function's call to inner never blocks, but the deferred
// statement does.
func outer(ch chan struct{}, b bool) ([]byte, error) {
defer func() {
<-ch
}()
return inner(ch, b)
}
func TestBlockingInDefer(t *testing.T) {
defer func() {
if x := recover(); x != nil {
t.Errorf("run time panic: %v", x)
}
}()
ch := make(chan struct{})
b := false
go func() {
time.Sleep(5 * time.Millisecond)
ch <- struct{}{}
}()
outer(ch, b)
}