aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRémy Oudompheng <oudomphe@phare.normalesup.org>2013-02-15 11:07:31 +1100
committerDave Cheney <dave@cheney.net>2013-02-15 11:07:31 +1100
commit7c5bd322d53cdcbfb59db334ba243502ae170803 (patch)
treec8854796df585d973e2044cffce1829b13b20f9d /src
parentea0292c61bfe85d85ef6f81fe1874227c5fc674a (diff)
downloadgo-7c5bd322d53cdcbfb59db334ba243502ae170803.tar.xz
log/syslog: fix channel race in test.
R=golang-dev, minux.ma, iant, bradfitz, dave CC=golang-dev https://golang.org/cl/7314057
Diffstat (limited to 'src')
-rw-r--r--src/pkg/log/syslog/syslog_test.go27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/pkg/log/syslog/syslog_test.go b/src/pkg/log/syslog/syslog_test.go
index 6d271c121c..2808622e22 100644
--- a/src/pkg/log/syslog/syslog_test.go
+++ b/src/pkg/log/syslog/syslog_test.go
@@ -46,7 +46,7 @@ func runPktSyslog(c net.PacketConn, done chan<- string) {
var crashy = false
-func runStreamSyslog(l net.Listener, done chan<- string) {
+func runStreamSyslog(l net.Listener, done chan<- string, wg *sync.WaitGroup) {
for {
var c net.Conn
var err error
@@ -54,7 +54,10 @@ func runStreamSyslog(l net.Listener, done chan<- string) {
fmt.Print(err)
return
}
+ wg.Add(1)
go func(c net.Conn) {
+ defer wg.Done()
+ c.SetReadDeadline(time.Now().Add(5 * time.Second))
b := bufio.NewReader(c)
for ct := 1; !crashy || ct&7 != 0; ct++ {
s, err := b.ReadString('\n')
@@ -68,7 +71,7 @@ func runStreamSyslog(l net.Listener, done chan<- string) {
}
}
-func startServer(n, la string, done chan<- string) (addr string) {
+func startServer(n, la string, done chan<- string) (addr string, wg *sync.WaitGroup) {
if n == "udp" || n == "tcp" {
la = "127.0.0.1:0"
} else {
@@ -85,20 +88,25 @@ func startServer(n, la string, done chan<- string) (addr string) {
os.Remove(la)
}
+ wg = new(sync.WaitGroup)
if n == "udp" || n == "unixgram" {
l, e := net.ListenPacket(n, la)
if e != nil {
log.Fatalf("startServer failed: %v", e)
}
addr = l.LocalAddr().String()
- go runPktSyslog(l, done)
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ runPktSyslog(l, done)
+ }()
} else {
l, e := net.Listen(n, la)
if e != nil {
log.Fatalf("startServer failed: %v", e)
}
addr = l.Addr().String()
- go runStreamSyslog(l, done)
+ go runStreamSyslog(l, done, wg)
}
return
}
@@ -109,7 +117,7 @@ func TestWithSimulated(t *testing.T) {
for _, tr := range transport {
done := make(chan string)
- addr := startServer(tr, "", done)
+ addr, _ := startServer(tr, "", done)
if tr == "unix" || tr == "unixgram" {
defer os.Remove(addr)
}
@@ -129,7 +137,7 @@ func TestWithSimulated(t *testing.T) {
func TestFlap(t *testing.T) {
net := "unix"
done := make(chan string)
- addr := startServer(net, "", done)
+ addr, _ := startServer(net, "", done)
defer os.Remove(addr)
s, err := Dial(net, addr, LOG_INFO|LOG_USER, "syslog_test")
@@ -234,7 +242,7 @@ func TestWrite(t *testing.T) {
} else {
for _, test := range tests {
done := make(chan string)
- addr := startServer("udp", "", done)
+ addr, _ := startServer("udp", "", done)
l, err := Dial("udp", addr, test.pri, test.pre)
if err != nil {
t.Fatalf("syslog.Dial() failed: %v", err)
@@ -255,7 +263,7 @@ func TestWrite(t *testing.T) {
}
func TestConcurrentWrite(t *testing.T) {
- addr := startServer("udp", "", make(chan string))
+ addr, _ := startServer("udp", "", make(chan string))
w, err := Dial("udp", addr, LOG_USER|LOG_ERR, "how's it going?")
if err != nil {
t.Fatalf("syslog.Dial() failed: %v", err)
@@ -281,7 +289,7 @@ func TestConcurrentReconnect(t *testing.T) {
net := "unix"
done := make(chan string)
- addr := startServer(net, "", done)
+ addr, srvWG := startServer(net, "", done)
defer os.Remove(addr)
// count all the messages arriving
@@ -319,6 +327,7 @@ func TestConcurrentReconnect(t *testing.T) {
}()
}
wg.Wait()
+ srvWG.Wait()
close(done)
select {