mirror of
https://github.com/golang/go
synced 2024-11-25 04:07:55 -07:00
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:
parent
5df1cf0475
commit
c01238a571
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user