projects
/
userspace-rcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test_urcu.c: use gettid()
[userspace-rcu.git]
/
urcu.c
diff --git
a/urcu.c
b/urcu.c
index 7e79207be6a88eaaf6d2b74c0b16b4543368a6fd..e401d8dc75d34bf04d2e62da56df3cc08f0d470d 100644
(file)
--- a/
urcu.c
+++ b/
urcu.c
@@
-1,3
+1,13
@@
+/*
+ * urcu.c
+ *
+ * Userspace RCU library
+ *
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ *
+ * Distributed under GPLv2
+ */
+
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
@@
-91,7
+101,7
@@
void wait_for_quiescent_state(int parity)
/*
* BUSY-LOOP.
*/
/*
* BUSY-LOOP.
*/
- while (
*index->urcu_active_readers
!= 0)
+ while (
index->urcu_active_readers[parity]
!= 0)
barrier();
}
/*
barrier();
}
/*
@@
-109,7
+119,7
@@
void wait_for_quiescent_state(int parity)
*/
void *urcu_publish_content(void **ptr, void *new)
{
*/
void *urcu_publish_content(void **ptr, void *new)
{
- int
ret,
prev_parity;
+ int prev_parity;
void *oldptr;
/*
void *oldptr;
/*
@@
-124,8
+134,8
@@
void *urcu_publish_content(void **ptr, void *new)
*/
oldptr = *ptr;
*ptr = new;
*/
oldptr = *ptr;
*ptr = new;
- wmb(); /* Write ptr before changing the qparity */
/* All threads should read qparity before ptr */
/* All threads should read qparity before ptr */
+ /* Write ptr before changing the qparity */
force_mb_all_threads();
prev_parity = switch_next_urcu_qparity();
force_mb_all_threads();
prev_parity = switch_next_urcu_qparity();
@@
-175,7
+185,7
@@
void urcu_remove_reader(pthread_t id)
assert(reader_data != NULL);
for (index = reader_data; index < reader_data + num_readers; index++) {
assert(reader_data != NULL);
for (index = reader_data; index < reader_data + num_readers; index++) {
- if (
index->tid == id
) {
+ if (
pthread_equal(index->tid, id)
) {
memcpy(index, &reader_data[num_readers - 1],
sizeof(struct reader_data));
reader_data[num_readers - 1].tid = 0;
memcpy(index, &reader_data[num_readers - 1],
sizeof(struct reader_data));
reader_data[num_readers - 1].tid = 0;
@@
-197,7
+207,6
@@
void urcu_register_thread(void)
void urcu_unregister_thread(void)
{
void urcu_unregister_thread(void)
{
- pthread_t self = pthread_self();
rcu_write_lock();
urcu_remove_reader(pthread_self());
rcu_write_unlock();
rcu_write_lock();
urcu_remove_reader(pthread_self());
rcu_write_unlock();
This page took
0.023461 seconds
and
4
git commands to generate.