mirror of
https://github.com/golang/go
synced 2024-11-22 04:24:39 -07:00
os: fix data race in epipecheck()
Fixes #3860. R=golang-dev, adg CC=golang-dev https://golang.org/cl/6443051
This commit is contained in:
parent
c49af2ccaf
commit
ab9ccedefe
@ -7,6 +7,7 @@
|
||||
package os
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
@ -15,12 +16,11 @@ func sigpipe() // implemented in package runtime
|
||||
|
||||
func epipecheck(file *File, e error) {
|
||||
if e == syscall.EPIPE {
|
||||
file.nepipe++
|
||||
if file.nepipe >= 10 {
|
||||
if atomic.AddInt32(&file.nepipe, 1) >= 10 {
|
||||
sigpipe()
|
||||
}
|
||||
} else {
|
||||
file.nepipe = 0
|
||||
atomic.StoreInt32(&file.nepipe, 0)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ type file struct {
|
||||
fd int
|
||||
name string
|
||||
dirinfo *dirInfo // nil unless directory being read
|
||||
nepipe int // number of consecutive EPIPE in Write
|
||||
nepipe int32 // number of consecutive EPIPE in Write
|
||||
}
|
||||
|
||||
// Fd returns the integer Unix file descriptor referencing the open file.
|
||||
|
@ -25,7 +25,6 @@ type file struct {
|
||||
fd syscall.Handle
|
||||
name string
|
||||
dirinfo *dirInfo // nil unless directory being read
|
||||
nepipe int // number of consecutive EPIPE in Write
|
||||
l sync.Mutex // used to implement windows pread/pwrite
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user