]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: introduce unit_main_pid_full() which optionally provides if the PID is alien...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 24 Jan 2024 05:08:40 +0000 (14:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 24 Jan 2024 05:43:18 +0000 (14:43 +0900)
src/core/service.c
src/core/unit.c
src/core/unit.h

index aacfe0d57e855a8c2268f9e9122b79d9c79adea5..4f53a0dc060e5d3de872523014235d0e89162ee2 100644 (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) {
index 3a3e5f4920273f8e07b1dc83c13135c2a9f20f45..1c7225bb8f19efc3af1729a2dec1a505311eaba8 100644 (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;
 }
 
index 115ab56eaa2a524b319d582bd7538a9902b959eb..eb94ff2964143feb6282317807cc43972c9d4902 100644 (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);