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 | |
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')
-rw-r--r-- | src/basic/pidref.c | 25 | ||||
-rw-r--r-- | src/basic/pidref.h | 2 |
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); |