From: Pieter Droogendijk Date: Sat, 7 Feb 2015 23:29:08 +0000 (+0100) Subject: Fix fdPoller.close to only close when fds have been assigned X-Git-Tag: v1.7.2~227 X-Git-Url: https://go.fuhry.dev/?a=commitdiff_plain;h=11ede43a04dcd16caf27982158560027562e0966;p=fsnotify.git Fix fdPoller.close to only close when fds have been assigned --- diff --git a/inotify_poller.go b/inotify_poller.go index 0097038..796a171 100644 --- a/inotify_poller.go +++ b/inotify_poller.go @@ -17,10 +17,19 @@ type fdPoller struct { pipe [2]int // Pipe for waking up } +func emptyPoller(fd int) *fdPoller { + poller := new(fdPoller) + poller.fd = fd + poller.epfd = -1 + poller.pipe[0] = -1 + poller.pipe[1] = -1 + return poller +} + // Create a new inotify poller. // This creates an inotify handler, and an epoll handler. func newFdPoller(fd int) (_ *fdPoller, errno error) { - poller := new(fdPoller) + poller := emptyPoller(fd) defer func() { if errno != nil { poller.close() @@ -155,7 +164,13 @@ func (poller *fdPoller) clearWake() error { // Close all poller file descriptors, but not the one passed to it. func (poller *fdPoller) close() { - syscall.Close(poller.pipe[1]) - syscall.Close(poller.pipe[0]) - syscall.Close(poller.epfd) + if poller.pipe[1] != -1 { + syscall.Close(poller.pipe[1]) + } + if poller.pipe[0] != -1 { + syscall.Close(poller.pipe[0]) + } + if poller.epfd != -1 { + syscall.Close(poller.epfd) + } }