From: Ian Lance Taylor Date: Wed, 25 May 2011 19:21:10 +0000 (-0700) Subject: net: If we stop polling, remove any pending events for the socket X-Git-Tag: weekly.2011-06-02~108 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0b8f1ac802a57ff26927edfefc97bf2348f7b9b0;p=gostls13.git net: If we stop polling, remove any pending events for the socket Fixes #1872. R=rsc CC=golang-dev, lars.pensjo https://golang.org/cl/4559046 --- diff --git a/src/pkg/net/fd_linux.go b/src/pkg/net/fd_linux.go index dcf65c014d..70fc344b2a 100644 --- a/src/pkg/net/fd_linux.go +++ b/src/pkg/net/fd_linux.go @@ -117,6 +117,17 @@ func (p *pollster) DelFD(fd int, mode int) { } else { p.StopWaiting(fd, writeFlags) } + + // Discard any queued up events. + i := 0 + for i < len(p.waitEvents) { + if fd == int(p.waitEvents[i].Fd) { + copy(p.waitEvents[i:], p.waitEvents[i+1:]) + p.waitEvents = p.waitEvents[:len(p.waitEvents)-1] + } else { + i++ + } + } } func (p *pollster) WaitFD(s *pollServer, nsec int64) (fd int, mode int, err os.Error) {