From 6f434e1d5b6a8b05ade202e0097033d6d7d90dcb Mon Sep 17 00:00:00 2001 From: Dominic Breuker Date: Wed, 21 Aug 2019 23:42:39 +0200 Subject: [PATCH] add kill switch for errno 22 error to shut down if the error does not go away --- internal/fswatcher/inotify/inotify.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/fswatcher/inotify/inotify.go b/internal/fswatcher/inotify/inotify.go index 3d2e85e..d4daa80 100644 --- a/internal/fswatcher/inotify/inotify.go +++ b/internal/fswatcher/inotify/inotify.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "io/ioutil" + "os" "strconv" "strings" "unsafe" @@ -70,9 +71,20 @@ func (i *Inotify) Watch(dir string) error { return nil } +var errno22Counter = 0 + func (i *Inotify) Read(buf []byte) (int, error) { n, errno := unix.Read(i.FD, buf) if n < 1 { + if errno.Error() == "invalid argument" { + errno22Counter += 1 + if errno22Counter > 20 { + fmt.Printf("Unrecoverable inotify error (%s, errno %d). Exiting program...\n", errno, errno) + os.Exit(22) + } + } else { + errno22Counter = 0 + } return n, fmt.Errorf("reading from inotify fd %d: errno: %d", i.FD, errno) } return n, nil