Просмотр исходного кода

Fix detected race

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
6219f4bd90
1 измененных файлов: 20 добавлений и 13 удалений
  1. 20
    13
      stats/statsd_test.go

+ 20
- 13
stats/statsd_test.go Просмотреть файл

@@ -4,6 +4,7 @@ import (
4 4
 	"bytes"
5 5
 	"net"
6 6
 	"strings"
7
+	"sync"
7 8
 	"testing"
8 9
 	"time"
9 10
 
@@ -18,15 +19,16 @@ import (
18 19
 const statsdSleepTime = 3 * statsd.DefaultFlushInterval
19 20
 
20 21
 type statsdFakeServer struct {
21
-	conn *net.UDPConn
22
-	buf  *bytes.Buffer
22
+	conn  *net.UDPConn
23
+	buf   *bytes.Buffer
24
+	mutex sync.Mutex
23 25
 }
24 26
 
25
-func (s statsdFakeServer) Addr() string {
27
+func (s *statsdFakeServer) Addr() string {
26 28
 	return s.conn.LocalAddr().String()
27 29
 }
28 30
 
29
-func (s statsdFakeServer) Close() error {
31
+func (s *statsdFakeServer) Close() error {
30 32
 	if s.conn != nil {
31 33
 		return s.conn.Close()
32 34
 	}
@@ -34,11 +36,14 @@ func (s statsdFakeServer) Close() error {
34 36
 	return nil
35 37
 }
36 38
 
37
-func (s statsdFakeServer) String() string {
39
+func (s *statsdFakeServer) String() string {
40
+	s.mutex.Lock()
41
+	defer s.mutex.Unlock()
42
+
38 43
 	return strings.TrimSpace(s.buf.String())
39 44
 }
40 45
 
41
-func statsdNewFakeServer() statsdFakeServer {
46
+func statsdNewFakeServer() *statsdFakeServer {
42 47
 	conn, err := net.ListenUDP("udp", &net.UDPAddr{
43 48
 		IP:   net.ParseIP("127.0.0.1"),
44 49
 		Port: 0,
@@ -47,7 +52,10 @@ func statsdNewFakeServer() statsdFakeServer {
47 52
 		panic(err)
48 53
 	}
49 54
 
50
-	buf := &bytes.Buffer{}
55
+	rv := &statsdFakeServer{
56
+		conn: conn,
57
+		buf:  &bytes.Buffer{},
58
+	}
51 59
 
52 60
 	go func() {
53 61
 		currentBuffer := make([]byte, 4096)
@@ -55,7 +63,9 @@ func statsdNewFakeServer() statsdFakeServer {
55 63
 		for {
56 64
 			n, _, err := conn.ReadFromUDP(currentBuffer)
57 65
 			if n > 0 {
58
-				buf.Write(currentBuffer[:n])
66
+				rv.mutex.Lock()
67
+				rv.buf.Write(currentBuffer[:n])
68
+				rv.mutex.Unlock()
59 69
 			}
60 70
 
61 71
 			if err != nil {
@@ -64,16 +74,13 @@ func statsdNewFakeServer() statsdFakeServer {
64 74
 		}
65 75
 	}()
66 76
 
67
-	return statsdFakeServer{
68
-		conn: conn,
69
-		buf:  buf,
70
-	}
77
+	return rv
71 78
 }
72 79
 
73 80
 type StatsdTestSuite struct {
74 81
 	suite.Suite
75 82
 
76
-	statsdServer statsdFakeServer
83
+	statsdServer *statsdFakeServer
77 84
 	factory      stats.StatsdFactory
78 85
 	statsd       events.Observer
79 86
 }

Загрузка…
Отмена
Сохранить