projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Detect RCU read-side underflows
[urcu.git]
/
urcu
/
static
/
urcu-bp.h
diff --git
a/urcu/static/urcu-bp.h
b/urcu/static/urcu-bp.h
index 0fcaa3aa272806aa9c8786c96b7675de4fcfddd3..ffd4b8959b61e49c092fa7d72a3053d5223ab500 100644
(file)
--- a/
urcu/static/urcu-bp.h
+++ b/
urcu/static/urcu-bp.h
@@
-164,11
+164,13
@@
static inline void _rcu_read_lock(void)
*/
static inline void _rcu_read_unlock(void)
{
*/
static inline void _rcu_read_unlock(void)
{
- /*
- * Finish using rcu before decrementing the pointer.
- */
+ unsigned long tmp;
+
+ tmp = URCU_TLS(rcu_reader)->ctr;
+ urcu_assert(tmp & RCU_GP_CTR_NEST_MASK);
+ /* Finish using rcu before decrementing the pointer. */
cmm_smp_mb();
cmm_smp_mb();
- _CMM_STORE_SHARED(URCU_TLS(rcu_reader)->ctr,
URCU_TLS(rcu_reader)->ctr
- RCU_GP_COUNT);
+ _CMM_STORE_SHARED(URCU_TLS(rcu_reader)->ctr,
tmp
- RCU_GP_COUNT);
cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
}
cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
}
This page took
0.024025 seconds
and
4
git commands to generate.