iwatch: handle watching paths for same inode

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2021-02-24 22:12:05 +01:00
1 parent 84248e1c56
commit e0d3aa8e06
2 files changed
+11 -4

No files matched your search

+2 -2
View File
@@ -48,7 +48,7 @@ int iwatch_init(struct iwatch *iw)
iw->fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC); iw->fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
if (iw->fd < 0) { if (iw->fd < 0) {
_pe("inotify_init()"); _pe("Failed creating inotify descriptor");
return -1; return -1;
} }
initialized = 1; initialized = 1;
@@ -90,7 +90,7 @@ int iwatch_add(struct iwatch *iw, char *file, uint32_t mask)
wd = inotify_add_watch(iw->fd, path, IWATCH_MASK | mask); wd = inotify_add_watch(iw->fd, path, IWATCH_MASK | mask);
if (wd < 0) { if (wd < 0) {
_pe("inotify_add_watch(%s)", path); _pe("Failed adding watcher for %s", path);
free(path); free(path);
return -1; return -1;
} }
+9 -2
View File
@@ -29,9 +29,16 @@
#include <lite/queue.h> #include <lite/queue.h>
#include <sys/inotify.h> #include <sys/inotify.h>
#ifndef IN_MASK_CREATE
#define IN_MASK_CREATE 0x10000000 /* since Linux 4.18 */
#endif
/* Monitors changes to both directories and files by default */ /*
#define IWATCH_MASK (IN_CREATE | IN_DELETE | IN_MODIFY | IN_ATTRIB | IN_MOVE) * Monitors changes to both directories and files by default, but only
* add watcher once (IN_MASK_CREATE) to avoid clobbering any already
* monitored paths.
*/
#define IWATCH_MASK (IN_CREATE | IN_DELETE | IN_MODIFY | IN_ATTRIB | IN_MOVE | IN_MASK_CREATE)
struct iwatch_path { struct iwatch_path {
TAILQ_ENTRY(iwatch_path) link; TAILQ_ENTRY(iwatch_path) link;