On Tue, Aug 31, 2021, 7:31 AM Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote:
> Use EAGIN instead of EWOULDBLOCK to be in line with the Linux man page. > EAGAIN AND Linux man page for what? These error numbers have the same values in Newlib. > --- > cpukit/score/src/futex.c | 42 ++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 40 insertions(+), 2 deletions(-) > > diff --git a/cpukit/score/src/futex.c b/cpukit/score/src/futex.c > index b65a843704..f3a1ae3994 100644 > --- a/cpukit/score/src/futex.c > +++ b/cpukit/score/src/futex.c > @@ -1,11 +1,12 @@ > /** > * @file > * > - * @ingroup RTEMSScore > + * @ingroup RTEMSScoreFutex > * > * @brief This source file contains the implementation of > * _Futex_Wait() and _Futex_Wake(). > */ > + > /* > * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. > * > @@ -20,6 +21,18 @@ > * http://www.rtems.org/license/LICENSE. > */ > > +/** > + * @defgroup RTEMSScoreFutex Futex Handler > + * > + * @ingroup RTEMSScore > + * > + * @brief This group contains the Futex Handler implementation. > + * > + * The behaviour of the futex operations is defined by Linux, see also: > + * > + * https://man7.org/linux/man-pages/man2/futex.2.html > + */ > + > #ifdef HAVE_CONFIG_H > #include "config.h" > #endif > @@ -84,6 +97,22 @@ static void _Futex_Queue_release( > _ISR_Local_enable( level ); > } > > +/** > + * @brief Performs the ``FUTEX_WAIT`` operation. > + * > + * @param[in, out] _futex is the futex object. > + * > + * @param[in] uaddr is the address to the futex state. > + * > + * @param val is the expected futex state value. > + * > + * @retval 0 Returns zero if the futex state is equal to the expected > value. > + * In this case the calling thread is enqueued on the thread queue of > the > + * futex object. > + * > + * @retval EAGAIN Returns EAGAIN if the futex state is not equal to the > + * expected value. > + */ > int _Futex_Wait( struct _Futex_Control *_futex, int *uaddr, int val ) > { > Futex_Control *futex; > @@ -113,7 +142,7 @@ int _Futex_Wait( struct _Futex_Control *_futex, int > *uaddr, int val ) > eno = 0; > } else { > _Futex_Queue_release( futex, level, &queue_context ); > - eno = EWOULDBLOCK; > + eno = EAGAIN; > } > > return eno; > @@ -143,6 +172,15 @@ static Thread_Control *_Futex_Flush_filter( > return the_thread; > } > > +/** > + * @brief Performs the ``FUTEX_WAKE`` operation. > + * > + * @param[in, out] _futex is the futex. > + * > + * @param count is the maximum count of threads to wake up. > + * > + * @return Returns the count of woken up threads. > + */ > int _Futex_Wake( struct _Futex_Control *_futex, int count ) > { > Futex_Control *futex; > -- > 2.31.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel