diff --git a/include/nuttx/spinlock.h b/include/nuttx/spinlock.h index 3b9e74cb2c96a..175a62302f797 100644 --- a/include/nuttx/spinlock.h +++ b/include/nuttx/spinlock.h @@ -33,7 +33,8 @@ #include #ifdef CONFIG_RW_SPINLOCK -typedef int32_t rwlock_t; +#include +typedef atomic_int rwlock_t; #define RW_SP_UNLOCKED 0 #define RW_SP_READ_LOCKED 1 #define RW_SP_WRITE_LOCKED -1 diff --git a/sched/semaphore/spinlock.c b/sched/semaphore/spinlock.c index c5b832f89d89f..641f035407fd7 100644 --- a/sched/semaphore/spinlock.c +++ b/sched/semaphore/spinlock.c @@ -474,7 +474,7 @@ void spin_clrbit(FAR volatile cpu_set_t *set, unsigned int cpu, void read_lock(FAR volatile rwlock_t *lock) { - rwlock_t old; + int32_t old; while (true) { @@ -521,7 +521,7 @@ void read_lock(FAR volatile rwlock_t *lock) bool read_trylock(FAR volatile rwlock_t *lock) { - rwlock_t old = atomic_load(lock); + int32_t old = atomic_load(lock); if (old >= RW_SP_UNLOCKED && atomic_compare_exchange_strong(lock, &old, old + 1)) @@ -587,7 +587,7 @@ void read_unlock(FAR volatile rwlock_t *lock) void write_lock(FAR volatile rwlock_t *lock) { - rwlock_t zero = RW_SP_UNLOCKED; + int32_t zero = RW_SP_UNLOCKED; while (!atomic_compare_exchange_strong(lock, &zero, RW_SP_WRITE_LOCKED)) { @@ -625,7 +625,7 @@ void write_lock(FAR volatile rwlock_t *lock) bool write_trylock(FAR volatile rwlock_t *lock) { - rwlock_t zero = RW_SP_UNLOCKED; + int32_t zero = RW_SP_UNLOCKED; if (!atomic_compare_exchange_strong(lock, &zero, RW_SP_WRITE_LOCKED)) {