From: Lennart Poettering Date: Wed, 29 Mar 2023 16:52:25 +0000 (+0200) Subject: fdset: add new fdset_consume() helper X-Git-Tag: v254-rc1~864^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e829f28c1bc6e6865261bfb3bc26089f50e0c7bd;p=thirdparty%2Fsystemd.git fdset: add new fdset_consume() helper --- diff --git a/src/shared/fdset.c b/src/shared/fdset.c index 49928b66d6e..d816a3e4efb 100644 --- a/src/shared/fdset.c +++ b/src/shared/fdset.c @@ -80,6 +80,19 @@ int fdset_put(FDSet *s, int fd) { return set_put(MAKE_SET(s), FD_TO_PTR(fd)); } +int fdset_consume(FDSet *s, int fd) { + int r; + + assert(s); + assert(fd >= 0); + + r = fdset_put(s, fd); + if (r < 0) + safe_close(fd); + + return r; +} + int fdset_put_dup(FDSet *s, int fd) { _cleanup_close_ int copy = -EBADF; int r; diff --git a/src/shared/fdset.h b/src/shared/fdset.h index 0e55db81b43..9700cdbbca8 100644 --- a/src/shared/fdset.h +++ b/src/shared/fdset.h @@ -13,6 +13,7 @@ FDSet* fdset_new(void); FDSet* fdset_free(FDSet *s); int fdset_put(FDSet *s, int fd); +int fdset_consume(FDSet *s, int fd); int fdset_put_dup(FDSet *s, int fd); bool fdset_contains(FDSet *s, int fd); diff --git a/src/udev/udevadm-lock.c b/src/udev/udevadm-lock.c index d19e7561f81..9a4a8adbc32 100644 --- a/src/udev/udevadm-lock.c +++ b/src/udev/udevadm-lock.c @@ -334,11 +334,9 @@ int lock_main(int argc, char *argv[], void *userdata) { if (fd < 0) return fd; - r = fdset_put(fds, fd); + r = fdset_consume(fds, TAKE_FD(fd)); if (r < 0) return log_oom(); - - TAKE_FD(fd); } }