Commit 90343a1f authored by Christopher Friedt's avatar Christopher Friedt Committed by Anas Nashif
Browse files

posix: eventfd: un-inline eventfd_read() and eventfd_write()



There is no major benefit to haveing `eventfd_read()` and
`eventfd_write()` as `static inline` functions and it is
arguably much easier to solve the deadlock bug when they
are not `inline`.

Signed-off-by: default avatarChristopher Friedt <cfriedt@meta.com>
parent 0014dd05
Loading
Loading
Loading
Loading
+2 −34
Original line number Diff line number Diff line
@@ -51,23 +51,7 @@ int eventfd(unsigned int initval, int flags);
 *
 * @return 0 on success, -1 on error
 */
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, &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;
}
int eventfd_read(int fd, eventfd_t *value);

/**
 * @brief Write to an eventfd
@@ -77,23 +61,7 @@ static inline int eventfd_read(int fd, eventfd_t *value)
 *
 * @return 0 on success, -1 on error
 */
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, &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;
}
int eventfd_write(int fd, eventfd_t value);

#ifdef __cplusplus
}
+36 −0
Original line number Diff line number Diff line
@@ -294,3 +294,39 @@ exit_mtx:
	k_mutex_unlock(&eventfd_mtx);
	return fd;
}

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, &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;
}

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, &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;
}