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:
parent
31b19bf538
commit
1502b9a648
1 changed files with 11 additions and 13 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue