]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/core/timer.c
core: add IgnoreOnSoftReboot= unit option
[thirdparty/systemd.git] / src / core / timer.c
index f6e660550749814df23e167771335d9cf6ce5461..3aaebe72c68b14c6b0f35295a605084015d55a97 100644 (file)
@@ -94,7 +94,12 @@ static int timer_add_default_dependencies(Timer *t) {
                 return r;
 
         if (MANAGER_IS_SYSTEM(UNIT(t)->manager)) {
-                r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
+                r = unit_add_two_dependencies_by_name(UNIT(t),
+                                UNIT_AFTER,
+                                UNIT(t)->ignore_on_soft_reboot ? -EINVAL : UNIT_REQUIRES,
+                                SPECIAL_SYSINIT_TARGET,
+                                true,
+                                UNIT_DEPENDENCY_DEFAULT);
                 if (r < 0)
                         return r;
 
@@ -112,7 +117,14 @@ static int timer_add_default_dependencies(Timer *t) {
                 }
         }
 
-        return unit_add_two_dependencies_by_name(UNIT(t), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
+        if (!UNIT(t)->ignore_on_soft_reboot)
+                return unit_add_two_dependencies_by_name(
+                                UNIT(t),
+                                UNIT_BEFORE, UNIT_CONFLICTS,
+                                SPECIAL_SHUTDOWN_TARGET, true,
+                                UNIT_DEPENDENCY_DEFAULT);
+
+        return unit_add_dependencies_on_real_shutdown_targets(UNIT(t));
 }
 
 static int timer_add_trigger_dependencies(Timer *t) {