From d7fdb84d32092fb5eadccaf0fd52d594f7051e1a Mon Sep 17 00:00:00 2001 From: chao an Date: Sun, 12 Nov 2023 21:50:20 +0800 Subject: [PATCH] spinlock: add __cplusplus check to avoid build break with C++ stdatomic.h is incompatible with C++ Signed-off-by: chao an --- include/nuttx/spinlock.h | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/include/nuttx/spinlock.h b/include/nuttx/spinlock.h index 63c82c2e8d2d0..e0663afda02c2 100644 --- a/include/nuttx/spinlock.h +++ b/include/nuttx/spinlock.h @@ -32,12 +32,21 @@ #include -#ifdef CONFIG_RW_SPINLOCK -#include +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +#if defined(CONFIG_RW_SPINLOCK) && !defined(__cplusplus) +# include typedef atomic_int rwlock_t; -#define RW_SP_UNLOCKED 0 -#define RW_SP_READ_LOCKED 1 -#define RW_SP_WRITE_LOCKED -1 +# define RW_SP_UNLOCKED 0 +# define RW_SP_READ_LOCKED 1 +# define RW_SP_WRITE_LOCKED -1 #endif #ifndef CONFIG_SPINLOCK @@ -500,7 +509,7 @@ void spin_unlock_irqrestore_wo_note(FAR spinlock_t *lock, irqstate_t flags); # define spin_unlock_irqrestore_wo_note(l, f) up_irq_restore(f) #endif -#ifdef CONFIG_RW_SPINLOCK +#if defined(CONFIG_RW_SPINLOCK) && !defined(__cplusplus) /**************************************************************************** * Name: rwlock_init @@ -808,5 +817,11 @@ void write_unlock_irqrestore(FAR rwlock_t *lock, irqstate_t flags); # define write_unlock_irqrestore(l, f) up_irq_restore(f) #endif -#endif /* CONFIG_RW_SPINLOCK */ +#endif /* CONFIG_RW_SPINLOCK && !__cplusplus */ + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + #endif /* __INCLUDE_NUTTX_SPINLOCK_H */