net: don't loop to drain wakeup pipe.

The loop always makes an extra system call.  It only makes a
difference if more than 100 goroutines started waiting for
something to happen on a network file descriptor since the
last time the pipe was drained, which is unlikely since we
will be woken up the first time a goroutine starts waiting.
If we don't drain the pipe this time, we'll be woken up again
right away and can drain again.

R=rsc
CC=golang-dev
https://golang.org/cl/4275042
This commit is contained in:
Ian Lance Taylor 2011-03-11 18:01:28 -08:00
parent 5df1cf0475
commit c01238a571

View File

@ -215,10 +215,10 @@ func (s *pollServer) Run() {
continue
}
if fd == s.pr.Fd() {
// Drain our wakeup pipe.
for nn, _ := s.pr.Read(scratch[0:]); nn > 0; {
nn, _ = s.pr.Read(scratch[0:])
}
// Drain our wakeup pipe (we could loop here,
// but it's unlikely that there are more than
// len(scratch) wakeup calls).
s.pr.Read(scratch[0:])
// Read from channels
Update:
for {