1
0
mirror of https://github.com/golang/go synced 2024-11-15 10:40:35 -07:00

[release-branch.go1] net: fix race between Close and Read

««« backport 5f24ff99b5f1
net: fix race between Close and Read

Fixes #3507.

Applied the suggested fix from rsc. If the connection
is in closing state then errClosing will bubble up to
the caller.

The fix has been applied to udp, ip and unix as well as
their code path include nil'ing c.fd on close. Func
tests are available in the linked issue that verified
the bug existed there as well.

R=rsc, fullung, alex.brainman, mikioh.mikioh
CC=golang-dev
https://golang.org/cl/6002053
»»»
This commit is contained in:
Dave Cheney 2012-04-21 10:01:32 +10:00
parent 802ac98ffc
commit 8b5350b8e4
4 changed files with 4 additions and 12 deletions

View File

@ -83,9 +83,7 @@ func (c *IPConn) Close() error {
if !c.ok() {
return syscall.EINVAL
}
err := c.fd.Close()
c.fd = nil
return err
return c.fd.Close()
}
// LocalAddr returns the local network address.

View File

@ -108,9 +108,7 @@ func (c *TCPConn) Close() error {
if !c.ok() {
return syscall.EINVAL
}
err := c.fd.Close()
c.fd = nil
return err
return c.fd.Close()
}
// CloseRead shuts down the reading side of the TCP connection.

View File

@ -88,9 +88,7 @@ func (c *UDPConn) Close() error {
if !c.ok() {
return syscall.EINVAL
}
err := c.fd.Close()
c.fd = nil
return err
return c.fd.Close()
}
// LocalAddr returns the local network address.

View File

@ -141,9 +141,7 @@ func (c *UnixConn) Close() error {
if !c.ok() {
return syscall.EINVAL
}
err := c.fd.Close()
c.fd = nil
return err
return c.fd.Close()
}
// LocalAddr returns the local network address, a *UnixAddr.