Thomas Monjalon, May 19, 2026 at 12:34: > The recursive unlock assumes that the caller owns the lock. > This behavior will be checked when RTE_ENABLE_ASSERT is on. > There is an additional check for the count which should be positive > if no corruption happened. > > Signed-off-by: Thomas Monjalon <[email protected]> > --- > v3: new patch in the series > --- > lib/eal/include/generic/rte_spinlock.h | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/eal/include/generic/rte_spinlock.h > b/lib/eal/include/generic/rte_spinlock.h > index ffdcb8fa3d..e7cd18a8e2 100644 > --- a/lib/eal/include/generic/rte_spinlock.h > +++ b/lib/eal/include/generic/rte_spinlock.h > @@ -21,6 +21,7 @@ > #ifdef RTE_FORCE_INTRINSICS > #include <rte_common.h> > #endif > +#include <rte_debug.h> > #include <rte_lock_annotations.h> > #include <rte_pause.h> > #include <rte_stdatomic.h> > @@ -245,6 +246,8 @@ static inline void > rte_spinlock_recursive_lock(rte_spinlock_recursive_t *slr) > static inline void rte_spinlock_recursive_unlock(rte_spinlock_recursive_t > *slr) > __rte_no_thread_safety_analysis > { > + RTE_ASSERT(rte_atomic_load_explicit(&slr->owner, > rte_memory_order_relaxed) == rte_gettid()); > + RTE_ASSERT(slr->count > 0); > if (--(slr->count) == 0) { > rte_atomic_store_explicit(&slr->owner, -1, > rte_memory_order_relaxed); > rte_spinlock_unlock(&slr->sl);
Acked-by: Robin Jarry <[email protected]>

