summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-11-15 21:30:52 +0100
committerLennart Poettering <lennart@poettering.net>2010-11-15 22:13:26 +0100
commit62347bc24a695bc0527f663af5fe136b1a993573 (patch)
tree264a0d187dd9ac1812c880089dc8072c87fa6dcb /src
parent40dde66fa021bf143bcd8f5e2bf5fadcc0339eae (diff)
path: properly free PathSpec structs
Diffstat (limited to 'src')
-rw-r--r--src/path.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/path.c b/src/path.c
index a8b1072449..cc8b79ad33 100644
--- a/src/path.c
+++ b/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,