summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2025-01-08 10:53:00 +0100
committerLennart Poettering <lennart@poettering.net>2025-01-08 14:51:19 +0100
commit06744cbb5293ee2af05e30ebbb0fddbc2a554837 (patch)
tree48dda1e2d0430e7998479e65ad62d892d9133662 /src
parentfmf: Only mess with /etc/yum.repos.d when running within testing farm (diff)
downloadsystemd-06744cbb5293ee2af05e30ebbb0fddbc2a554837.tar.xz
systemd-06744cbb5293ee2af05e30ebbb0fddbc2a554837.zip
pidref: copy fd id in pidref_copy() too
Diffstat (limited to 'src')
-rw-r--r--src/basic/pidref.c25
-rw-r--r--src/basic/pidref.h2
2 files changed, 11 insertions, 16 deletions
diff --git a/src/basic/pidref.c b/src/basic/pidref.c
index f665438375..53992aa380 100644
--- a/src/basic/pidref.c
+++ b/src/basic/pidref.c
@@ -219,37 +219,32 @@ PidRef* pidref_free(PidRef *pidref) {
return mfree(pidref);
}
-int pidref_copy(const PidRef *pidref, PidRef *dest) {
- _cleanup_close_ int dup_fd = -EBADF;
- pid_t dup_pid = 0;
+int pidref_copy(const PidRef *pidref, PidRef *ret) {
+ _cleanup_(pidref_done) PidRef copy = PIDREF_NULL;
/* If NULL is passed we'll generate a PidRef that refers to no process. This makes it easy to
* copy pidref fields that might or might not reference a process yet. */
- assert(dest);
+ assert(ret);
if (pidref) {
if (pidref_is_remote(pidref)) /* Propagate remote flag */
- dup_fd = -EREMOTE;
+ copy.fd = -EREMOTE;
else if (pidref->fd >= 0) {
- dup_fd = fcntl(pidref->fd, F_DUPFD_CLOEXEC, 3);
- if (dup_fd < 0) {
+ copy.fd = fcntl(pidref->fd, F_DUPFD_CLOEXEC, 3);
+ if (copy.fd < 0) {
if (!ERRNO_IS_RESOURCE(errno))
return -errno;
- dup_fd = -EBADF;
+ copy.fd = -EBADF;
}
}
- if (pidref->pid > 0)
- dup_pid = pidref->pid;
+ copy.pid = pidref->pid;
+ copy.fd_id = pidref->fd_id;
}
- *dest = (PidRef) {
- .fd = TAKE_FD(dup_fd),
- .pid = dup_pid,
- };
-
+ *ret = TAKE_PIDREF(copy);
return 0;
}
diff --git a/src/basic/pidref.h b/src/basic/pidref.h
index 42ddf4e50b..a268af4603 100644
--- a/src/basic/pidref.h
+++ b/src/basic/pidref.h
@@ -83,7 +83,7 @@ void pidref_done(PidRef *pidref);
PidRef* pidref_free(PidRef *pidref);
DEFINE_TRIVIAL_CLEANUP_FUNC(PidRef*, pidref_free);
-int pidref_copy(const PidRef *pidref, PidRef *dest);
+int pidref_copy(const PidRef *pidref, PidRef *ret);
int pidref_dup(const PidRef *pidref, PidRef **ret);
int pidref_new_from_pid(pid_t pid, PidRef **ret);