core: introduce unit_main_pid_full() which optionally provides if the PID is alien or not

This commit is contained in:
Yu Watanabe
2024-01-24 14:43:18 +09:00
parent d70dfe1b27
commit 3e22239da7
3 changed files with 16 additions and 6 deletions
+7 -2
View File
@@ -4786,8 +4786,13 @@ static void service_reset_failed(Unit *u) {
s->flush_n_restarts = false;
}
static PidRef* service_main_pid(Unit *u) {
return &ASSERT_PTR(SERVICE(u))->main_pid;
static PidRef* service_main_pid(Unit *u, bool *ret_is_alien) {
Service *s = ASSERT_PTR(SERVICE(u));
if (ret_is_alien)
*ret_is_alien = s->main_pid_alien;
return &s->main_pid;
}
static PidRef* service_control_pid(Unit *u) {
+4 -2
View File
@@ -5112,12 +5112,14 @@ PidRef* unit_control_pid(Unit *u) {
return NULL;
}
PidRef* unit_main_pid(Unit *u) {
PidRef* unit_main_pid_full(Unit *u, bool *ret_is_alien) {
assert(u);
if (UNIT_VTABLE(u)->main_pid)
return UNIT_VTABLE(u)->main_pid(u);
return UNIT_VTABLE(u)->main_pid(u, ret_is_alien);
if (ret_is_alien)
*ret_is_alien = false;
return NULL;
}
+5 -2
View File
@@ -732,7 +732,7 @@ typedef struct UnitVTable {
usec_t (*get_timeout_start_usec)(Unit *u);
/* Returns the main PID if there is any defined, or 0. */
PidRef* (*main_pid)(Unit *u);
PidRef* (*main_pid)(Unit *u, bool *ret_is_alien);
/* Returns the control PID if there is any defined, or 0. */
PidRef* (*control_pid)(Unit *u);
@@ -1021,7 +1021,10 @@ bool unit_is_upheld_by_active(Unit *u, Unit **ret_culprit);
bool unit_is_bound_by_inactive(Unit *u, Unit **ret_culprit);
PidRef* unit_control_pid(Unit *u);
PidRef* unit_main_pid(Unit *u);
PidRef* unit_main_pid_full(Unit *u, bool *ret_is_alien);
static inline PidRef* unit_main_pid(Unit *u) {
return unit_main_pid_full(u, NULL);
}
void unit_warn_if_dir_nonempty(Unit *u, const char* where);
int unit_fail_if_noncanonical(Unit *u, const char* where);