]> go.fuhry.dev Git - fsnotify.git/commitdiff
Fix fdPoller.close to only close when fds have been assigned
authorPieter Droogendijk <pieter@binky.org.uk>
Sat, 7 Feb 2015 23:29:08 +0000 (00:29 +0100)
committerNathan Youngman <git@nathany.com>
Sun, 8 Feb 2015 20:22:31 +0000 (13:22 -0700)
inotify_poller.go

index 00970383a1138d6cac3dc5ab411138b6aa2b2e51..796a1717be9baac95dde4bb069434cb80daa97e2 100644 (file)
@@ -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)
+       }
 }