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
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 {
// 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
}