X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Funit.c;h=0e9325dfa497067f141b4d7004d9f80d6b4114ab;hp=ab6eb20227c1c9c1b2177228646ad422826d30a8;hb=f89f1e8f836c8e646e0f95ab808ce20cab6ac114;hpb=9fc507041eb524799a0410839e961ec188a78491 diff --git a/src/unit.c b/src/unit.c index ab6eb2022..0e9325dfa 100644 --- a/src/unit.c +++ b/src/unit.c @@ -2006,6 +2006,11 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds) { if (u->meta.job) unit_serialize_item(u, f, "job", job_type_to_string(u->meta.job->type)); + dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->meta.inactive_exit_timestamp); + dual_timestamp_serialize(f, "active-enter-timestamp", &u->meta.active_enter_timestamp); + dual_timestamp_serialize(f, "active-exit-timestamp", &u->meta.active_exit_timestamp); + dual_timestamp_serialize(f, "inactive-enter-timestamp", &u->meta.inactive_enter_timestamp); + /* End marker */ fputc('\n', f); return 0; @@ -2082,7 +2087,14 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { u->meta.deserialized_job = type; continue; - } + } else if (streq(l, "inactive-exit-timestamp")) + dual_timestamp_deserialize(f, v, &u->meta.inactive_exit_timestamp); + else if (streq(l, "active-enter-timestamp")) + dual_timestamp_deserialize(f, v, &u->meta.active_enter_timestamp); + else if (streq(l, "active-exit-timestamp")) + dual_timestamp_deserialize(f, v, &u->meta.active_exit_timestamp); + else if (streq(l, "inactive-enter-timestamp")) + dual_timestamp_deserialize(f, v, &u->meta.inactive_enter_timestamp); if ((r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds)) < 0) return r; @@ -2252,6 +2264,22 @@ bool unit_name_is_valid(const char *n, bool template_ok) { return unit_name_is_valid_no_type(n, template_ok); } +int unit_kill(Unit *u, KillWho w, KillMode m, int signo, DBusError *error) { + assert(u); + assert(w >= 0 && w < _KILL_WHO_MAX); + assert(m >= 0 && m < _KILL_MODE_MAX); + assert(signo > 0); + assert(signo < _NSIG); + + if (m == KILL_NONE) + return 0; + + if (!UNIT_VTABLE(u)->kill) + return -ENOTSUP; + + return UNIT_VTABLE(u)->kill(u, w, m, signo, error); +} + static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = { [UNIT_STUB] = "stub", [UNIT_LOADED] = "loaded", @@ -2292,12 +2320,3 @@ static const char* const unit_dependency_table[_UNIT_DEPENDENCY_MAX] = { }; DEFINE_STRING_TABLE_LOOKUP(unit_dependency, UnitDependency); - -static const char* const kill_mode_table[_KILL_MODE_MAX] = { - [KILL_CONTROL_GROUP] = "control-group", - [KILL_PROCESS_GROUP] = "process-group", - [KILL_PROCESS] = "process", - [KILL_NONE] = "none" -}; - -DEFINE_STRING_TABLE_LOOKUP(kill_mode, KillMode);