core: simplify unit_need_daemon_reload() a bit
authorLennart Poettering <lennart@poettering.net>
Mon, 2 May 2016 13:07:40 +0000 (15:07 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 2 May 2016 13:10:35 +0000 (15:10 +0200)
And let's make it more accurate: if we have acquire the list of unit drop-ins,
then let's do a full comparison against the old list we already have, and if
things differ in any way, we know we have to reload.

This makes sure we detect changes to drop-in directories in more cases.

src/core/unit.c

index b4d313a..93aead0 100644 (file)
@@ -2968,32 +2968,24 @@ static bool fragment_mtime_newer(const char *path, usec_t mtime) {
 bool unit_need_daemon_reload(Unit *u) {
         _cleanup_strv_free_ char **t = NULL;
         char **path;
-        unsigned loaded_cnt, current_cnt;
 
         assert(u);
 
-        if (fragment_mtime_newer(u->fragment_path, u->fragment_mtime) ||
-            fragment_mtime_newer(u->source_path, u->source_mtime))
+        if (fragment_mtime_newer(u->fragment_path, u->fragment_mtime))
                 return true;
 
-        (void) unit_find_dropin_paths(u, &t);
-        loaded_cnt = strv_length(t);
-        current_cnt = strv_length(u->dropin_paths);
-
-        if (loaded_cnt == current_cnt) {
-                if (loaded_cnt == 0)
-                        return false;
+        if (fragment_mtime_newer(u->source_path, u->source_mtime))
+                return true;
 
-                if (strv_overlap(u->dropin_paths, t)) {
-                        STRV_FOREACH(path, u->dropin_paths)
-                                if (fragment_mtime_newer(*path, u->dropin_mtime))
-                                        return true;
+        (void) unit_find_dropin_paths(u, &t);
+        if (!strv_equal(u->dropin_paths, t))
+                return true;
 
-                        return false;
-                }
-        }
+        STRV_FOREACH(path, u->dropin_paths)
+                if (fragment_mtime_newer(*path, u->dropin_mtime))
+                        return true;
 
-        return true;
+        return false;
 }
 
 void unit_reset_failed(Unit *u) {