mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-01-17 17:46:20 +07:00
unit: serialize jobs in addition to units
This commit is contained in:
parent
a4ddf82766
commit
cca098b095
@ -625,8 +625,7 @@ int manager_coldplug(Manager *m) {
|
|||||||
if (u->meta.id != k)
|
if (u->meta.id != k)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (UNIT_VTABLE(u)->coldplug)
|
if ((q = unit_coldplug(u)) < 0)
|
||||||
if ((q = UNIT_VTABLE(u)->coldplug(u)) < 0)
|
|
||||||
r = q;
|
r = q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
34
src/unit.c
34
src/unit.c
@ -67,6 +67,7 @@ Unit *unit_new(Manager *m) {
|
|||||||
|
|
||||||
u->meta.manager = m;
|
u->meta.manager = m;
|
||||||
u->meta.type = _UNIT_TYPE_INVALID;
|
u->meta.type = _UNIT_TYPE_INVALID;
|
||||||
|
u->meta.deserialized_job = _JOB_TYPE_INVALID;
|
||||||
|
|
||||||
return u;
|
return u;
|
||||||
}
|
}
|
||||||
@ -1794,6 +1795,9 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds) {
|
|||||||
if ((r = UNIT_VTABLE(u)->serialize(u, f, fds)) < 0)
|
if ((r = UNIT_VTABLE(u)->serialize(u, f, fds)) < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
if (u->meta.job)
|
||||||
|
unit_serialize_item(u, f, "job", job_type_to_string(u->meta.job->type));
|
||||||
|
|
||||||
/* End marker */
|
/* End marker */
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1860,6 +1864,17 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
|
|||||||
} else
|
} else
|
||||||
v = l+k;
|
v = l+k;
|
||||||
|
|
||||||
|
if (streq(l, "job")) {
|
||||||
|
JobType type;
|
||||||
|
|
||||||
|
if ((type = job_type_from_string(v)) < 0)
|
||||||
|
log_debug("Failed to parse job type value %s", v);
|
||||||
|
else
|
||||||
|
u->meta.deserialized_job = type;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds)) < 0)
|
if ((r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds)) < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -1902,6 +1917,25 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int unit_coldplug(Unit *u) {
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(u);
|
||||||
|
|
||||||
|
if (UNIT_VTABLE(u)->coldplug)
|
||||||
|
if ((r = UNIT_VTABLE(u)->coldplug(u)) < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (u->meta.deserialized_job >= 0) {
|
||||||
|
if ((r = manager_add_job(u->meta.manager, u->meta.deserialized_job, u, JOB_FAIL, false, NULL)) < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
u->meta.deserialized_job = _JOB_TYPE_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
|
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
|
||||||
[UNIT_SERVICE] = "service",
|
[UNIT_SERVICE] = "service",
|
||||||
[UNIT_TIMER] = "timer",
|
[UNIT_TIMER] = "timer",
|
||||||
|
@ -185,6 +185,10 @@ struct Meta {
|
|||||||
/* Garbage collect us we nobody wants or requires us anymore */
|
/* Garbage collect us we nobody wants or requires us anymore */
|
||||||
bool stop_when_unneeded;
|
bool stop_when_unneeded;
|
||||||
|
|
||||||
|
/* When deserializing, temporarily store the job type for this
|
||||||
|
* unit here, if there was a job scheduled */
|
||||||
|
JobType deserialized_job;
|
||||||
|
|
||||||
bool in_load_queue:1;
|
bool in_load_queue:1;
|
||||||
bool in_dbus_queue:1;
|
bool in_dbus_queue:1;
|
||||||
bool in_cleanup_queue:1;
|
bool in_cleanup_queue:1;
|
||||||
@ -437,6 +441,8 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds);
|
|||||||
|
|
||||||
int unit_add_node_link(Unit *u, const char *what, bool wants);
|
int unit_add_node_link(Unit *u, const char *what, bool wants);
|
||||||
|
|
||||||
|
int unit_coldplug(Unit *u);
|
||||||
|
|
||||||
const char *unit_type_to_string(UnitType i);
|
const char *unit_type_to_string(UnitType i);
|
||||||
UnitType unit_type_from_string(const char *s);
|
UnitType unit_type_from_string(const char *s);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user