From 59291e7573c5c7f6cae9f50b370c529ff9fe17d4 Mon Sep 17 00:00:00 2001 From: Matias Elo Date: Fri, 14 Oct 2022 11:07:07 +0300 Subject: [PATCH] linux-gen: spinlock_recursive: add debug asserts Add debug asserts for detecting recursion count wraparounds and invalid odp_spinlock_recursive_unlock() calls. Signed-off-by: Matias Elo Reviewed-by: Tuomas Taipale --- .../include/odp/api/plat/spinlock_recursive_inlines.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platform/linux-generic/include/odp/api/plat/spinlock_recursive_inlines.h b/platform/linux-generic/include/odp/api/plat/spinlock_recursive_inlines.h index 2dd846fe9a..e795353f4a 100644 --- a/platform/linux-generic/include/odp/api/plat/spinlock_recursive_inlines.h +++ b/platform/linux-generic/include/odp/api/plat/spinlock_recursive_inlines.h @@ -13,6 +13,10 @@ #include +#include + +#include + /** @cond _ODP_HIDE_FROM_DOXYGEN_ */ #ifndef _ODP_NO_INLINE @@ -43,6 +47,7 @@ _ODP_INLINE void odp_spinlock_recursive_lock(odp_spinlock_recursive_t *rlock) int thr = odp_thread_id(); if (rlock->owner == thr) { + _ODP_ASSERT(rlock->cnt < UINT32_MAX); rlock->cnt++; return; } @@ -57,6 +62,7 @@ _ODP_INLINE int odp_spinlock_recursive_trylock(odp_spinlock_recursive_t *rlock) int thr = odp_thread_id(); if (rlock->owner == thr) { + _ODP_ASSERT(rlock->cnt < UINT32_MAX); rlock->cnt++; return 1; } @@ -72,6 +78,7 @@ _ODP_INLINE int odp_spinlock_recursive_trylock(odp_spinlock_recursive_t *rlock) _ODP_INLINE void odp_spinlock_recursive_unlock(odp_spinlock_recursive_t *rlock) { + _ODP_ASSERT(rlock->cnt); rlock->cnt--; if (rlock->cnt > 0)