lib: posix: eventfd: move intialization out of search loop

Search for unused eventfd object and just remember its instance in loop
body. Initialize object later, to make it distinct from "search
phase". This change is basically an improvement for readability.

Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
This commit is contained in:
Marcin Niestroj 2020-06-02 22:28:34 +02:00 committed by Jukka Rissanen
commit 1502b9a648

View file

@ -196,8 +196,8 @@ static const struct fd_op_vtable eventfd_fd_vtable = {
int eventfd(unsigned int initval, int flags)
{
struct eventfd *efd = NULL;
int i, fd;
void *obj = NULL;
if (flags & ~EFD_FLAGS_SET) {
errno = EINVAL;
@ -213,27 +213,25 @@ int eventfd(unsigned int initval, int flags)
}
for (i = 0; i < ARRAY_SIZE(efds); ++i) {
if (efds[i].flags & EFD_IN_USE) {
continue;
if (!(efds[i].flags & EFD_IN_USE)) {
efd = &efds[i];
break;
}
obj = &efds[i];
efds[i].flags = EFD_IN_USE | flags;
efds[i].cnt = 0;
k_sem_init(&efds[i].read_sem, 0, UINT32_MAX);
k_sem_init(&efds[i].write_sem, 0, UINT32_MAX);
break;
}
if (obj == NULL) {
if (efd == NULL) {
z_free_fd(fd);
errno = ENOMEM;
k_mutex_unlock(&eventfd_mtx);
return -1;
}
z_finalize_fd(fd, obj, &eventfd_fd_vtable);
efd->flags = EFD_IN_USE | flags;
efd->cnt = 0;
k_sem_init(&efd->read_sem, 0, UINT32_MAX);
k_sem_init(&efd->write_sem, 0, UINT32_MAX);
z_finalize_fd(fd, efd, &eventfd_fd_vtable);
k_mutex_unlock(&eventfd_mtx);