X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fpath.c;h=bd40ab6f99bfa1fc41583e67125abedcf496dc50;hb=e0fa621b8b52da4d95bf5918eb998c9166e4bc7c;hp=cc8b79ad3304a64ce53b5b0b661775d3e91636ba;hpb=62347bc24a695bc0527f663af5fe136b1a993573;p=elogind.git diff --git a/src/path.c b/src/path.c index cc8b79ad3..bd40ab6f9 100644 --- a/src/path.c +++ b/src/path.c @@ -189,7 +189,7 @@ static int path_watch_one(Path *p, PathSpec *s) { }; bool exists = false; - char *k; + char *k, *slash; int r; assert(p); @@ -213,15 +213,15 @@ static int path_watch_one(Path *p, PathSpec *s) { if ((s->primary_wd = inotify_add_watch(s->inotify_fd, k, flags_table[s->type])) >= 0) exists = true; - for (;;) { + do { int flags; - char *slash; /* This assumes the path was passed through path_kill_slashes()! */ if (!(slash = strrchr(k, '/'))) break; - *slash = 0; + /* Trim the path at the last slash. Keep the slash if it's the root dir. */ + slash[slash == k] = 0; flags = IN_DELETE_SELF|IN_MOVE_SELF|IN_ATTRIB; if (!exists) @@ -229,7 +229,7 @@ static int path_watch_one(Path *p, PathSpec *s) { if (inotify_add_watch(s->inotify_fd, k, flags) >= 0) exists = true; - } + } while (slash != k); return 0; @@ -279,7 +279,7 @@ static void path_set_state(Path *p, PathState state) { path_state_to_string(old_state), path_state_to_string(state)); - unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state]); + unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state], true); } static void path_enter_waiting(Path *p, bool initial, bool recheck); @@ -383,6 +383,7 @@ static void path_enter_waiting(Path *p, bool initial, bool recheck) { } if (good) { + log_debug("%s got triggered.", p->meta.id); path_enter_running(p); return; } @@ -485,7 +486,7 @@ static void path_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { p->state != PATH_RUNNING) return; - log_debug("inotify wakeup on %s.", u->meta.id); + /* log_debug("inotify wakeup on %s.", u->meta.id); */ if (events != EPOLLIN) { log_error("Got Invalid poll event on inotify.");