projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
qsbr rcu: rc_register_thread also make the thread online.
[urcu.git]
/
urcu-qsbr.c
diff --git
a/urcu-qsbr.c
b/urcu-qsbr.c
index 6ba03642f852763057781dcf14bf2ff4a01dc5b9..878a550b9291d21a464f5e4c1db9e58f1d741ea3 100644
(file)
--- a/
urcu-qsbr.c
+++ b/
urcu-qsbr.c
@@
-251,6
+251,7
@@
static void rcu_remove_reader(pthread_t id)
void rcu_register_thread(void)
{
void rcu_register_thread(void)
{
+ _rcu_thread_online();
internal_urcu_lock();
rcu_add_reader(pthread_self());
internal_urcu_unlock();
internal_urcu_lock();
rcu_add_reader(pthread_self());
internal_urcu_unlock();
@@
-258,6
+259,11
@@
void rcu_register_thread(void)
void rcu_unregister_thread(void)
{
void rcu_unregister_thread(void)
{
+ /*
+ * We have to make the thread offline otherwise we end up dealocking
+ * with a waiting writer.
+ */
+ _rcu_thread_offline();
internal_urcu_lock();
rcu_remove_reader(pthread_self());
internal_urcu_unlock();
internal_urcu_lock();
rcu_remove_reader(pthread_self());
internal_urcu_unlock();
This page took
0.023168 seconds
and
4
git commands to generate.