mirror of
https://github.com/golang/go
synced 2024-11-12 09:20:22 -07:00
exp/inotify: close event channel before file descriptor
Closing the inotify file descriptor can take over a second when running on Ubuntu Precise in an NFS directory, leading to the test error in issue 3132. Closing the event channel first lets a client that does not care about the error channel move on. Fixes #3132. R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/7300045
This commit is contained in:
parent
255fb521da
commit
da35d42521
@ -153,7 +153,7 @@ func (w *Watcher) readEvents() {
|
||||
var buf [syscall.SizeofInotifyEvent * 4096]byte
|
||||
|
||||
for {
|
||||
n, err := syscall.Read(w.fd, buf[0:])
|
||||
n, err := syscall.Read(w.fd, buf[:])
|
||||
// See if there is a message on the "done" channel
|
||||
var done bool
|
||||
select {
|
||||
@ -163,11 +163,13 @@ func (w *Watcher) readEvents() {
|
||||
|
||||
// If EOF or a "done" message is received
|
||||
if n == 0 || done {
|
||||
// The syscall.Close can be slow. Close
|
||||
// w.Event first.
|
||||
close(w.Event)
|
||||
err := syscall.Close(w.fd)
|
||||
if err != nil {
|
||||
w.Error <- os.NewSyscallError("close", err)
|
||||
}
|
||||
close(w.Event)
|
||||
close(w.Error)
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user