From 48e0b70ad3dd550bf29810ec9b4f6ebdab3d7605 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bert=20M=C3=BCnnich?= <ber.t@posteo.de>
Date: Sun, 18 Feb 2018 13:13:11 +0100
Subject: Ignore outdated inotify events

---
 autoreload_inotify.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/autoreload_inotify.c b/autoreload_inotify.c
index de9cdf8..7c5b09a 100644
--- a/autoreload_inotify.c
+++ b/autoreload_inotify.c
@@ -85,7 +85,7 @@ bool arl_handle(arl_t *arl)
 {
 	bool reload = false;
 	char *ptr;
-	const struct inotify_event *event;
+	const struct inotify_event *e;
 
 	for (;;) {
 		ssize_t len = read(arl->fd, buf.d, sizeof(buf.d));
@@ -95,14 +95,14 @@ bool arl_handle(arl_t *arl)
 				continue;
 			break;
 		}
-		for (ptr = buf.d; ptr < buf.d + len; ptr += sizeof(*event) + event->len) {
-			event = (const struct inotify_event*) ptr;
-			if (event->mask & IN_CLOSE_WRITE) {
+		for (ptr = buf.d; ptr < buf.d + len; ptr += sizeof(*e) + e->len) {
+			e = (const struct inotify_event*) ptr;
+			if (e->wd == arl->wd_file && (e->mask & IN_CLOSE_WRITE)) {
 				reload = true;
-			} else if (event->mask & IN_DELETE_SELF) {
+			} else if (e->wd == arl->wd_file && (e->mask & IN_DELETE_SELF)) {
 				rm_watch(arl->fd, &arl->wd_file);
-			} else if (event->mask & (IN_CREATE | IN_MOVED_TO)) {
-				if (STREQ(event->name, arl->filename))
+			} else if (e->wd == arl->wd_dir && (e->mask & (IN_CREATE | IN_MOVED_TO))) {
+				if (STREQ(e->name, arl->filename))
 					reload = true;
 			}
 		}
-- 
cgit v1.2.3