From: Yu Watanabe Date: Wed, 24 Jan 2024 05:08:40 +0000 (+0900) Subject: core: introduce unit_main_pid_full() which optionally provides if the PID is alien... X-Git-Tag: v256-rc1~1057^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e22239da7a05c3c0d45fe1059a1a59dd29bcb5f;p=thirdparty%2Fsystemd.git core: introduce unit_main_pid_full() which optionally provides if the PID is alien or not --- diff --git a/src/core/service.c b/src/core/service.c index aacfe0d57e8..4f53a0dc060 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -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) { diff --git a/src/core/unit.c b/src/core/unit.c index 3a3e5f49202..1c7225bb8f1 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -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; } diff --git a/src/core/unit.h b/src/core/unit.h index 115ab56eaa2..eb94ff29641 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -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);