X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Ftimer.c;h=79a7540553ab0ed0f5b03cdf73482d41d562a566;hb=39881ed299a39ad331262c75d9e627e6ffb848eb;hp=9155dfc81fccedad8cef9638513d60a034da4407;hpb=46bcf49291874c5a6b5b34ad6413c5a0f7725f4c;p=elogind.git diff --git a/src/core/timer.c b/src/core/timer.c index 9155dfc81..79a754055 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -28,7 +28,6 @@ #include "special.h" #include "bus-util.h" #include "bus-error.h" -#include "mkdir.h" static const UnitActiveState state_translation_table[_TIMER_STATE_MAX] = { [TIMER_DEAD] = UNIT_INACTIVE, @@ -268,7 +267,12 @@ static void timer_set_state(Timer *t, TimerState state) { static void timer_enter_waiting(Timer *t, bool initial); -static int timer_coldplug(Unit *u) { +static int timer_enter_waiting_coldplug(Unit *u) { + timer_enter_waiting(TIMER(u), false); + return 0; +} + +static int timer_coldplug(Unit *u, Hashmap *deferred_work) { Timer *t = TIMER(u); assert(t); @@ -276,9 +280,10 @@ static int timer_coldplug(Unit *u) { if (t->deserialized_state != t->state) { - if (t->deserialized_state == TIMER_WAITING) - timer_enter_waiting(t, false); - else + if (t->deserialized_state == TIMER_WAITING) { + hashmap_put(deferred_work, u, &timer_enter_waiting_coldplug); + timer_set_state(t, TIMER_WAITING); + } else timer_set_state(t, t->deserialized_state); } @@ -548,7 +553,7 @@ static int timer_start(Unit *u) { t->result = TIMER_SUCCESS; timer_enter_waiting(t, true); - return 0; + return 1; } static int timer_stop(Unit *u) { @@ -558,7 +563,7 @@ static int timer_stop(Unit *u) { assert(t->state == TIMER_WAITING || t->state == TIMER_RUNNING || t->state == TIMER_ELAPSED); timer_enter_dead(t, TIMER_SUCCESS); - return 0; + return 1; } static int timer_serialize(Unit *u, FILE *f, FDSet *fds) { @@ -748,6 +753,7 @@ const UnitVTable timer_vtable = { "Unit\0" "Timer\0" "Install\0", + .private_section = "Timer", .init = timer_init, .done = timer_done, @@ -773,4 +779,7 @@ const UnitVTable timer_vtable = { .bus_interface = "org.freedesktop.systemd1.Timer", .bus_vtable = bus_timer_vtable, + .bus_set_property = bus_timer_set_property, + + .can_transient = true, };