diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-24 12:58:35 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-11-24 18:57:51 +0300 |
commit | 724e21493ab48794336f3d97152aeaa1fe3adbee (patch) | |
tree | f38547278c44613b886805ea3898c2f0c2ce99f4 /newlib | |
parent | 1c545411720f11190e43eca59c0931402f5f62f8 (diff) |
Self-contained pthread_spinlock_t for RTEMS
Turn pthread_spinlock_t into a self-contained object. On uni-processor
configurations, interrupts are disabled in the lock/trylock operations
and the previous interrupt status is restored in the corresponding
unlock operations. On SMP configurations, a ticket lock is a acquired
and released in addition.
See also:
https://devel.rtems.org/ticket/2674
This implementation is simple and efficient. However, this test case of
the Linux Test Project would fail due to call of printf() and sleep()
during spin lock ownership:
https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_spin_lock/1-2.c
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
Diffstat (limited to 'newlib')
-rw-r--r-- | newlib/libc/sys/rtems/include/sys/_pthreadtypes.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/newlib/libc/sys/rtems/include/sys/_pthreadtypes.h b/newlib/libc/sys/rtems/include/sys/_pthreadtypes.h index e1a88e9cd..bd66c689e 100644 --- a/newlib/libc/sys/rtems/include/sys/_pthreadtypes.h +++ b/newlib/libc/sys/rtems/include/sys/_pthreadtypes.h @@ -22,6 +22,7 @@ #include <sys/sched.h> #include <sys/cpuset.h> +#include <sys/lock.h> /* * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. @@ -190,7 +191,10 @@ typedef struct { /* POSIX Spin Lock Types */ #if defined(_POSIX_SPIN_LOCKS) -typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */ +typedef struct { + struct _Ticket_lock_Control _Lock; + __uint32_t _interrupt_state; +} pthread_spinlock_t; /* POSIX Spin Lock Object */ #endif /* defined(_POSIX_SPIN_LOCKS) */ /* POSIX Reader/Writer Lock Types */ |