diff --git a/include/posix/sys/eventfd.h b/include/posix/sys/eventfd.h index 5b0388e5e64..efce22b8ae6 100644 --- a/include/posix/sys/eventfd.h +++ b/include/posix/sys/eventfd.h @@ -7,6 +7,7 @@ #ifndef ZEPHYR_INCLUDE_POSIX_SYS_EVENTFD_H_ #define ZEPHYR_INCLUDE_POSIX_SYS_EVENTFD_H_ +#include #include #include @@ -53,13 +54,18 @@ int eventfd(unsigned int initval, int flags); static inline int eventfd_read(int fd, eventfd_t *value) { const struct fd_op_vtable *efd_vtable; + struct k_mutex *lock; ssize_t ret; void *obj; - obj = z_get_fd_obj_and_vtable(fd, &efd_vtable); + obj = z_get_fd_obj_and_vtable(fd, &efd_vtable, &lock); + + (void)k_mutex_lock(lock, K_FOREVER); ret = efd_vtable->read(obj, value, sizeof(*value)); + k_mutex_unlock(lock); + return ret == sizeof(eventfd_t) ? 0 : -1; } @@ -74,13 +80,18 @@ static inline int eventfd_read(int fd, eventfd_t *value) static inline int eventfd_write(int fd, eventfd_t value) { const struct fd_op_vtable *efd_vtable; + struct k_mutex *lock; ssize_t ret; void *obj; - obj = z_get_fd_obj_and_vtable(fd, &efd_vtable); + obj = z_get_fd_obj_and_vtable(fd, &efd_vtable, &lock); + + (void)k_mutex_lock(lock, K_FOREVER); ret = efd_vtable->write(obj, &value, sizeof(value)); + k_mutex_unlock(lock); + return ret == sizeof(eventfd_t) ? 0 : -1; }