Fix data race

This commit is contained in:
Miek Gieben 2015-11-26 14:03:51 +00:00
parent 7e2a67cadb
commit 9e23f0c96e
1 changed files with 22 additions and 5 deletions

View File

@ -390,7 +390,24 @@ func TestShutdownTCP(t *testing.T) {
} }
} }
type trigger struct {
done bool
sync.RWMutex
}
func (t *trigger) Set() {
t.Lock()
defer t.Unlock()
t.done = true
}
func (t *trigger) Get() bool {
t.RLock()
defer t.RUnlock()
return t.done
}
func TestHandlerCloseTCP(t *testing.T) { func TestHandlerCloseTCP(t *testing.T) {
ln, err := net.Listen("tcp", "127.0.0.1:0") ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil { if err != nil {
panic(err) panic(err)
@ -400,9 +417,9 @@ func TestHandlerCloseTCP(t *testing.T) {
server := &Server{Addr: addr, Net: "tcp", Listener: ln} server := &Server{Addr: addr, Net: "tcp", Listener: ln}
hname := "testhandlerclosetcp." hname := "testhandlerclosetcp."
h_triggered := false triggered := &trigger{}
HandleFunc(hname, func(w ResponseWriter, r *Msg) { HandleFunc(hname, func(w ResponseWriter, r *Msg) {
h_triggered = true triggered.Set()
w.Close() w.Close()
}) })
defer HandleRemove(hname) defer HandleRemove(hname)
@ -415,7 +432,7 @@ func TestHandlerCloseTCP(t *testing.T) {
exchange: exchange:
_, _, err := c.Exchange(m, addr) _, _, err := c.Exchange(m, addr)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
t.Logf("Exchange failed: %s\n", err) t.Logf("exchange failed: %s\n", err)
if tries == 3 { if tries == 3 {
return return
} }
@ -425,8 +442,8 @@ func TestHandlerCloseTCP(t *testing.T) {
} }
}() }()
server.ActivateAndServe() server.ActivateAndServe()
if !h_triggered { if !triggered.Get() {
t.Fatalf("Handler never called") t.Fatalf("handler never called")
} }
} }