path: properly free PathSpec structs

This commit is contained in:
Lennart Poettering 2010-11-15 21:30:52 +01:00
parent 40dde66fa0
commit 62347bc24a
1 changed files with 13 additions and 11 deletions

View File

@ -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,