net: use chan bool instead of chan *netFD to avoid cycle

The cycle is *netFD -> cw chanl *netFD in struct ->
same *netFD in channel read buffer.

Because channels are finalized, the cycle makes them
uncollectable.  A better fix is to make channels not
finalized anymore, and that will happen, but this is
an easy, reasonable workaround until then.

Another good fix would be to zero the channel receive
buffer entry after the receive.  That too will happen.

R=r
CC=golang-dev
https://golang.org/cl/875043
diff --git a/src/pkg/net/fd.go b/src/pkg/net/fd.go
index 28e85be..02f7319 100644
--- a/src/pkg/net/fd.go
+++ b/src/pkg/net/fd.go
@@ -26,8 +26,8 @@
 	family  int
 	proto   int
 	sysfile *os.File
-	cr      chan *netFD
-	cw      chan *netFD
+	cr      chan bool
+	cw      chan bool
 	net     string
 	laddr   Addr
 	raddr   Addr
@@ -122,9 +122,9 @@
 	if intfd < 0 {
 		// fd closed underfoot
 		if mode == 'r' {
-			fd.cr <- fd
+			fd.cr <- true
 		} else {
-			fd.cw <- fd
+			fd.cw <- true
 		}
 		return
 	}
@@ -166,12 +166,12 @@
 	if mode == 'r' {
 		for fd.ncr > 0 {
 			fd.ncr--
-			fd.cr <- fd
+			fd.cr <- true
 		}
 	} else {
 		for fd.ncw > 0 {
 			fd.ncw--
-			fd.cw <- fd
+			fd.cw <- true
 		}
 	}
 }
@@ -312,8 +312,8 @@
 		rs = raddr.String()
 	}
 	f.sysfile = os.NewFile(fd, net+":"+ls+"->"+rs)
-	f.cr = make(chan *netFD, 1)
-	f.cw = make(chan *netFD, 1)
+	f.cr = make(chan bool, 1)
+	f.cw = make(chan bool, 1)
 	return f, nil
 }