net: fix data race in benchmark
If an error happens on a connection, server goroutine can call b.Logf
after benchmark finishes.
So join both client and server goroutines.
Update #7718

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/84750047
diff --git a/src/pkg/net/tcp_test.go b/src/pkg/net/tcp_test.go
index c8c2a9c..abd305a 100644
--- a/src/pkg/net/tcp_test.go
+++ b/src/pkg/net/tcp_test.go
@@ -97,6 +97,7 @@
 		b.Fatalf("Listen failed: %v", err)
 	}
 	defer ln.Close()
+	serverSem := make(chan bool, numConcurrent)
 	// Acceptor.
 	go func() {
 		for {
@@ -104,9 +105,13 @@
 			if err != nil {
 				break
 			}
+			serverSem <- true
 			// Server connection.
 			go func(c Conn) {
-				defer c.Close()
+				defer func() {
+					c.Close()
+					<-serverSem
+				}()
 				if timeout {
 					c.SetDeadline(time.Now().Add(time.Hour)) // Not intended to fire.
 				}
@@ -119,13 +124,13 @@
 			}(c)
 		}
 	}()
-	sem := make(chan bool, numConcurrent)
+	clientSem := make(chan bool, numConcurrent)
 	for i := 0; i < conns; i++ {
-		sem <- true
+		clientSem <- true
 		// Client connection.
 		go func() {
 			defer func() {
-				<-sem
+				<-clientSem
 			}()
 			c, err := Dial("tcp", ln.Addr().String())
 			if err != nil {
@@ -144,8 +149,9 @@
 			}
 		}()
 	}
-	for i := 0; i < cap(sem); i++ {
-		sem <- true
+	for i := 0; i < numConcurrent; i++ {
+		clientSem <- true
+		serverSem <- true
 	}
 }