Merge pull request #478 from mattiaswal/fix-initial-devmon

devmon: assert condition immediately if device already exists

  1. udev fires early, creates device nodes in /dev/                                                                                                           
  2. Config is parsed later, calling devmon_add_cond() for each dev/ condition
  3. At this point the device already exists but the inotify event was missed
  4. The PR's fexist() check catches this — new node is added to the TAILQ and condition is immediately asserted

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg authored and GitHub committed 2026-02-23 08:09:12 +01:00
commit e1fe870aaf
1 file changed
+5
+5
View File
@@ -75,6 +75,7 @@ static void drop_node(struct dev_node *node)
void devmon_add_cond(const char *cond) void devmon_add_cond(const char *cond)
{ {
struct dev_node *node; struct dev_node *node;
char path[PATH_MAX];
if (!cond || strncmp(cond, "dev/", 4)) { if (!cond || strncmp(cond, "dev/", 4)) {
// dbg("no match %s", cond ?: "<NIL>"); // dbg("no match %s", cond ?: "<NIL>");
@@ -103,6 +104,10 @@ void devmon_add_cond(const char *cond)
node->refcnt = 1; node->refcnt = 1;
TAILQ_INSERT_TAIL(&dev_node_list, node, link); TAILQ_INSERT_TAIL(&dev_node_list, node, link);
snprintf(path, sizeof(path), "/%s", cond);
if (fexist(path))
cond_set(cond);
} }
void devmon_del_cond(const char *cond) void devmon_del_cond(const char *cond)