path: properly free PathSpec structs
This commit is contained in:
parent
40dde66fa0
commit
62347bc24a
24
src/path.c
24
src/path.c
|
@ -39,6 +39,17 @@ static const UnitActiveState state_translation_table[_PATH_STATE_MAX] = {
|
|||
[PATH_FAILED] = UNIT_FAILED
|
||||
};
|
||||
|
||||
static void path_unwatch_one(Path *p, PathSpec *s) {
|
||||
|
||||
if (s->inotify_fd < 0)
|
||||
return;
|
||||
|
||||
unit_unwatch_fd(UNIT(p), &s->watch);
|
||||
|
||||
close_nointr_nofail(s->inotify_fd);
|
||||
s->inotify_fd = -1;
|
||||
}
|
||||
|
||||
static void path_done(Unit *u) {
|
||||
Path *p = PATH(u);
|
||||
PathSpec *s;
|
||||
|
@ -46,7 +57,9 @@ static void path_done(Unit *u) {
|
|||
assert(p);
|
||||
|
||||
while ((s = p->specs)) {
|
||||
path_unwatch_one(p, s);
|
||||
LIST_REMOVE(PathSpec, spec, p->specs, s);
|
||||
free(s->path);
|
||||
free(s);
|
||||
}
|
||||
}
|
||||
|
@ -168,17 +181,6 @@ static void path_dump(Unit *u, FILE *f, const char *prefix) {
|
|||
s->path);
|
||||
}
|
||||
|
||||
static void path_unwatch_one(Path *p, PathSpec *s) {
|
||||
|
||||
if (s->inotify_fd < 0)
|
||||
return;
|
||||
|
||||
unit_unwatch_fd(UNIT(p), &s->watch);
|
||||
|
||||
close_nointr_nofail(s->inotify_fd);
|
||||
s->inotify_fd = -1;
|
||||
}
|
||||
|
||||
static int path_watch_one(Path *p, PathSpec *s) {
|
||||
static const int flags_table[_PATH_TYPE_MAX] = {
|
||||
[PATH_EXISTS] = IN_DELETE_SELF|IN_MOVE_SELF|IN_ATTRIB,
|
||||
|
|
Loading…
Reference in New Issue