fdset: add new fdset_consume() helper

This commit is contained in:
Lennart Poettering 2023-03-29 18:52:25 +02:00
parent bdcad22e8e
commit e829f28c1b
3 changed files with 15 additions and 3 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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);
}
}