From 5a1c1b534fe13e60ef9bce0dc680ad6f2a0c577f Mon Sep 17 00:00:00 2001 From: Franck Bui Date: Thu, 5 Sep 2019 16:53:50 +0200 Subject: [PATCH] core: restore initialization of u->source_mtime During the rework of unit file loading, commit e8630e695232bdfc dropped the initialization u->source_mtime. This had the bad side effect that generated units always needed daemon reloading. --- src/core/load-fragment.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 8eaf8b33e9..a7951a5757 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -4594,6 +4594,7 @@ static int merge_by_names(Unit **u, Set *names, const char *id) { int unit_load_fragment(Unit *u) { const char *fragment; _cleanup_set_free_free_ Set *names = NULL; + struct stat st; int r; assert(u); @@ -4625,7 +4626,6 @@ int unit_load_fragment(Unit *u) { if (fragment) { /* Open the file, check if this is a mask, otherwise read. */ _cleanup_fclose_ FILE *f = NULL; - struct stat st; /* Try to open the file name. A symlink is OK, for example for linked files or masks. We * expect that all symlinks within the lookup paths have been already resolved, but we don't @@ -4660,6 +4660,13 @@ int unit_load_fragment(Unit *u) { } } + if (u->source_path) { + if (stat(u->source_path, &st) >= 0) + u->source_mtime = timespec_load(&st.st_mtim); + else + u->source_mtime = 0; + } + /* We do the merge dance here because for some unit types, the unit might have aliases which are not * declared in the file system. In particular, this is true (and frequent) for device and swap units. */