Commit cb10d7db authored by k8s-merge-robot's avatar k8s-merge-robot Committed by GitHub

Merge pull request #27916 from krousey/bump_inotify

Automatic merge from submit-queue Bump inotify to pickup fix for memory leak Just picking up the fix I made in https://go-review.googlesource.com/#/c/24289/ Hopefully this will help #27456 cc: @kubernetes/sig-node @lavalamp
parents d5da5b55 751af3a8
{ {
"ImportPath": "k8s.io/kubernetes", "ImportPath": "k8s.io/kubernetes",
"GoVersion": "go1.6", "GoVersion": "go1.6",
"GodepVersion": "v69", "GodepVersion": "v74",
"Packages": [ "Packages": [
"github.com/ugorji/go/codec/codecgen", "github.com/ugorji/go/codec/codecgen",
"github.com/onsi/ginkgo/ginkgo", "github.com/onsi/ginkgo/ginkgo",
...@@ -1973,7 +1973,7 @@ ...@@ -1973,7 +1973,7 @@
}, },
{ {
"ImportPath": "golang.org/x/exp/inotify", "ImportPath": "golang.org/x/exp/inotify",
"Rev": "d00e13ec443927751b2bd49e97dea7bf3b6a6487" "Rev": "292a51b8d262487dab23a588950e8052d63d9113"
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
......
...@@ -144,6 +144,10 @@ func (w *Watcher) RemoveWatch(path string) error { ...@@ -144,6 +144,10 @@ func (w *Watcher) RemoveWatch(path string) error {
return os.NewSyscallError("inotify_rm_watch", errno) return os.NewSyscallError("inotify_rm_watch", errno)
} }
delete(w.watches, path) delete(w.watches, path)
// Locking here to protect the read from paths in readEvents.
w.mu.Lock()
delete(w.paths, int(watch.wd))
w.mu.Unlock()
return nil return nil
} }
...@@ -197,8 +201,10 @@ func (w *Watcher) readEvents() { ...@@ -197,8 +201,10 @@ func (w *Watcher) readEvents() {
// the "Name" field with a valid filename. We retrieve the path of the watch from // the "Name" field with a valid filename. We retrieve the path of the watch from
// the "paths" map. // the "paths" map.
w.mu.Lock() w.mu.Lock()
event.Name = w.paths[int(raw.Wd)] name, ok := w.paths[int(raw.Wd)]
w.mu.Unlock() w.mu.Unlock()
if ok {
event.Name = name
if nameLen > 0 { if nameLen > 0 {
// Point "bytes" at the first byte of the filename // Point "bytes" at the first byte of the filename
bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent]))
...@@ -207,7 +213,7 @@ func (w *Watcher) readEvents() { ...@@ -207,7 +213,7 @@ func (w *Watcher) readEvents() {
} }
// Send the event on the events channel // Send the event on the events channel
w.Event <- event w.Event <- event
}
// Move to the next event in the buffer // Move to the next event in the buffer
offset += syscall.SizeofInotifyEvent + nameLen offset += syscall.SizeofInotifyEvent + nameLen
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment