summaryrefslogtreecommitdiffstats
path: root/src/vnet/session/session.h
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2018-01-24 10:49:23 -0800
committerFlorin Coras <florin.coras@gmail.com>2018-01-27 19:02:12 +0000
commit84a30ef2b51d0dc60176f4a93c90134bb443a260 (patch)
tree58e8a07acc454c74f25c39526ce9863b15a6ac5e /src/vnet/session/session.h
parent6484a682153cf3ec057f0643d73cce688ad0eb41 (diff)
session: use clib rwlocks instead of custom implementation
Change-Id: I68933d709ce9cc686ba06466e136434b663920ef Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/session/session.h')
-rw-r--r--src/vnet/session/session.h21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/vnet/session/session.h b/src/vnet/session/session.h
index da9332a2a10..d0bf95c41e4 100644
--- a/src/vnet/session/session.h
+++ b/src/vnet/session/session.h
@@ -118,12 +118,8 @@ struct _session_manager_main
/** Per worker thread session pools */
stream_session_t **sessions;
- /** Per worker-thread count of threads peeking into the session pool */
- u32 *session_peekers;
-
- /** Per worker-thread rw peekers locks */
- clib_spinlock_t *peekers_readers_locks;
- clib_spinlock_t *peekers_write_locks;
+ /** Per worker-thread session pool peekers rw locks */
+ clib_rwlock_t *peekers_rw_locks;
/** Pool of listen sessions. Same type as stream sessions to ease lookups */
stream_session_t **listen_sessions;
@@ -316,11 +312,7 @@ session_pool_add_peeker (u32 thread_index)
session_manager_main_t *smm = &session_manager_main;
if (thread_index == vlib_get_thread_index ())
return;
- clib_spinlock_lock_if_init (&smm->peekers_readers_locks[thread_index]);
- smm->session_peekers[thread_index] += 1;
- if (smm->session_peekers[thread_index] == 1)
- clib_spinlock_lock_if_init (&smm->peekers_write_locks[thread_index]);
- clib_spinlock_unlock_if_init (&smm->peekers_readers_locks[thread_index]);
+ clib_rwlock_reader_lock (&smm->peekers_rw_locks[thread_index]);
}
always_inline void
@@ -329,12 +321,7 @@ session_pool_remove_peeker (u32 thread_index)
session_manager_main_t *smm = &session_manager_main;
if (thread_index == vlib_get_thread_index ())
return;
- ASSERT (session_manager_main.session_peekers[thread_index] > 0);
- clib_spinlock_lock_if_init (&smm->peekers_readers_locks[thread_index]);
- smm->session_peekers[thread_index] -= 1;
- if (smm->session_peekers[thread_index] == 0)
- clib_spinlock_unlock_if_init (&smm->peekers_write_locks[thread_index]);
- clib_spinlock_unlock_if_init (&smm->peekers_readers_locks[thread_index]);
+ clib_rwlock_reader_unlock (&smm->peekers_rw_locks[thread_index]);
}
/**