]> Cypherpunks repositories - gostls13.git/commitdiff
net: Fix race condition in test.
authorIan Lance Taylor <iant@golang.org>
Fri, 21 Jan 2011 21:57:52 +0000 (13:57 -0800)
committerIan Lance Taylor <iant@golang.org>
Fri, 21 Jan 2011 21:57:52 +0000 (13:57 -0800)
The test code used to do this:

for _, tc := range tests {
ch <- &tc
}

Note that &tc is always the same value here.  As the value is
received from the channel, the sender can loop around and
change the contents of tc.  This means that the receiver's
value is unstable and can change while it is in use.

R=adg, r2, rsc
CC=chris, golang-dev
https://golang.org/cl/3978043

src/pkg/net/dnsname_test.go

index f4089c5db8a1c57a1741746d150dd08430440023..0c1a6251899db108e02d1c20dda48844fda3b093 100644 (file)
@@ -27,7 +27,7 @@ var tests = []testCase{
        {"a.b..com", false},
 }
 
-func getTestCases(ch chan<- *testCase) {
+func getTestCases(ch chan<- testCase) {
        defer close(ch)
        var char59 = ""
        var char63 = ""
@@ -39,17 +39,17 @@ func getTestCases(ch chan<- *testCase) {
        char64 = char63 + "a"
 
        for _, tc := range tests {
-               ch <- &tc
+               ch <- tc
        }
 
-       ch <- &testCase{char63 + ".com", true}
-       ch <- &testCase{char64 + ".com", false}
+       ch <- testCase{char63 + ".com", true}
+       ch <- testCase{char64 + ".com", false}
        // 255 char name is fine:
-       ch <- &testCase{char59 + "." + char63 + "." + char63 + "." +
+       ch <- testCase{char59 + "." + char63 + "." + char63 + "." +
                char63 + ".com",
                true}
        // 256 char name is bad:
-       ch <- &testCase{char59 + "a." + char63 + "." + char63 + "." +
+       ch <- testCase{char59 + "a." + char63 + "." + char63 + "." +
                char63 + ".com",
                false}
 }
@@ -58,7 +58,7 @@ func TestDNSNames(t *testing.T) {
        if runtime.GOOS == "windows" {
                return
        }
-       ch := make(chan *testCase)
+       ch := make(chan testCase)
        go getTestCases(ch)
        for tc := range ch {
                if isDomainName(tc.name) != tc.result {