]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/timer: in containers OnBootSec should count from container startup 1807/head
authorMichal Schmidt <mschmidt@redhat.com>
Sat, 7 Nov 2015 14:09:31 +0000 (15:09 +0100)
committerMichal Schmidt <mschmidt@redhat.com>
Sat, 7 Nov 2015 14:16:00 +0000 (15:16 +0100)
In Fedora dnf-makecache.timer specifies OnBootSec=10min, but it fired
during boot in systemd-nspawn, because the clock ticks since the host's
boot.

Fix it by treating OnBootSec the same as OnStartupSec when running in
a container.

src/core/timer.c

index cc2afedabf796cbe21a7c83a16e70090d21a1787..c9dc97d4fb2a30d552c01d09723779491b1180e4 100644 (file)
@@ -34,6 +34,7 @@
 #include "unit-name.h"
 #include "unit.h"
 #include "user-util.h"
+#include "virt.h"
 
 static const UnitActiveState state_translation_table[_TIMER_STATE_MAX] = {
         [TIMER_DEAD] = UNIT_INACTIVE,
@@ -359,10 +360,14 @@ static void timer_enter_waiting(Timer *t, bool initial) {
                                 break;
 
                         case TIMER_BOOT:
-                                /* CLOCK_MONOTONIC equals the uptime on Linux */
-                                base = 0;
-                                break;
-
+                                if (detect_container() <= 0) {
+                                        /* CLOCK_MONOTONIC equals the uptime on Linux */
+                                        base = 0;
+                                        break;
+                                }
+                                /* In a container we don't want to include the time the host
+                                 * was already up when the container started, so count from
+                                 * our own startup. Fall through. */
                         case TIMER_STARTUP:
                                 base = UNIT(t)->manager->userspace_timestamp.monotonic;
                                 break;