diff options
author | Lennart Poettering <lennart@poettering.net> | 2025-01-08 10:53:00 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2025-01-08 14:51:19 +0100 |
commit | 06744cbb5293ee2af05e30ebbb0fddbc2a554837 (patch) | |
tree | 48dda1e2d0430e7998479e65ad62d892d9133662 /src/basic/pidref.c | |
parent | fmf: Only mess with /etc/yum.repos.d when running within testing farm (diff) | |
download | systemd-06744cbb5293ee2af05e30ebbb0fddbc2a554837.tar.xz systemd-06744cbb5293ee2af05e30ebbb0fddbc2a554837.zip |
pidref: copy fd id in pidref_copy() too
Diffstat (limited to 'src/basic/pidref.c')
-rw-r--r-- | src/basic/pidref.c | 25 |
1 files changed, 10 insertions, 15 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; } |