X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Funit.h;h=3e61067f84d0152d94fc2a3b24a61df4caa8bd5f;hb=530a9662aa3d291555e5b3f6eb43199e1b04f63c;hp=c686aeccefda52913f5dde6d3d09ec9fd406ea0c;hpb=68db7a3bd9b2f8640c7297382b6d20eb995f7e1e;p=elogind.git diff --git a/src/core/unit.h b/src/core/unit.h index c686aecce..3e61067f8 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -177,7 +177,8 @@ struct Unit { /* Counterparts in the cgroup filesystem */ char *cgroup_path; - CGroupControllerMask cgroup_mask; + CGroupControllerMask cgroup_realized_mask; + CGroupControllerMask cgroup_subtree_mask; CGroupControllerMask cgroup_members_mask; UnitRef slice; @@ -203,6 +204,11 @@ struct Unit { /* CGroup realize members queue */ LIST_FIELDS(Unit, cgroup_queue); + /* PIDs we keep an eye on. Note that a unit might have many + * more, but these are the ones we care enough about to + * process SIGCHLD for */ + Set *pids; + /* Used during GC sweeps */ unsigned gc_marker; @@ -261,6 +267,8 @@ struct Unit { bool in_audit:1; bool cgroup_realized:1; + bool cgroup_members_mask_valid:1; + bool cgroup_subtree_mask_valid:1; }; struct UnitStatusMessageFormats { @@ -511,7 +519,7 @@ int unit_load_fragment_and_dropin(Unit *u); int unit_load_fragment_and_dropin_optional(Unit *u); int unit_load(Unit *unit); -int unit_add_default_slice(Unit *u); +int unit_add_default_slice(Unit *u, CGroupContext *c); const char *unit_description(Unit *u) _pure_; @@ -538,6 +546,10 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su int unit_watch_pid(Unit *u, pid_t pid); void unit_unwatch_pid(Unit *u, pid_t pid); +int unit_watch_all_pids(Unit *u); +void unit_unwatch_all_pids(Unit *u); + +void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2); int unit_watch_bus_name(Unit *u, const char *name); void unit_unwatch_bus_name(Unit *u, const char *name); @@ -590,11 +602,12 @@ void unit_ref_unset(UnitRef *ref); #define UNIT_DEREF(ref) ((ref).unit) #define UNIT_ISSET(ref) (!!(ref).unit) -int unit_exec_context_defaults(Unit *u, ExecContext *c); +int unit_patch_contexts(Unit *u); ExecContext *unit_get_exec_context(Unit *u) _pure_; KillContext *unit_get_kill_context(Unit *u) _pure_; CGroupContext *unit_get_cgroup_context(Unit *u) _pure_; + ExecRuntime *unit_get_exec_runtime(Unit *u) _pure_; int unit_setup_exec_runtime(Unit *u);