projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tests/rcutorture: Factor out thread registration
[urcu.git]
/
tests
/
regression
/
rcutorture.h
diff --git
a/tests/regression/rcutorture.h
b/tests/regression/rcutorture.h
index b3a300c7a1d8d63c816828e5ae49720fa7458246..e20d82eeb15df7873f74e8b795b16f8d111110ec 100644
(file)
--- a/
tests/regression/rcutorture.h
+++ b/
tests/regression/rcutorture.h
@@
-391,8
+391,14
@@
void *rcu_update_stress_test(void *arg __attribute__((unused)))
struct rcu_head rh;
enum writer_state writer_state = WRITER_STATE_SYNC_RCU;
struct rcu_head rh;
enum writer_state writer_state = WRITER_STATE_SYNC_RCU;
+ rcu_register_thread();
+
+ /* Offline for poll. */
+ put_thread_offline();
while (goflag == GOFLAG_INIT)
(void) poll(NULL, 0, 1);
while (goflag == GOFLAG_INIT)
(void) poll(NULL, 0, 1);
+ put_thread_online();
+
while (goflag == GOFLAG_RUN) {
i = rcu_stress_idx + 1;
if (i >= RCU_STRESS_PIPE_LEN)
while (goflag == GOFLAG_RUN) {
i = rcu_stress_idx + 1;
if (i >= RCU_STRESS_PIPE_LEN)
@@
-422,9
+428,8
@@
void *rcu_update_stress_test(void *arg __attribute__((unused)))
strerror(errno));
abort();
}
strerror(errno));
abort();
}
- rcu_register_thread();
call_rcu(&rh, rcu_update_stress_test_rcu);
call_rcu(&rh, rcu_update_stress_test_rcu);
- rcu_unregister_thread();
+
/*
* Our MacOS X test machine with the following
* config:
/*
* Our MacOS X test machine with the following
* config:
@@
-440,10
+445,13
@@
void *rcu_update_stress_test(void *arg __attribute__((unused)))
* us to be registered RCU readers).
*/
call_rcu_wait = true;
* us to be registered RCU readers).
*/
call_rcu_wait = true;
+ /* Offline for pthread_cond_wait. */
+ put_thread_offline();
do {
ret = pthread_cond_wait(&call_rcu_test_cond,
&call_rcu_test_mutex);
} while (call_rcu_wait);
do {
ret = pthread_cond_wait(&call_rcu_test_cond,
&call_rcu_test_mutex);
} while (call_rcu_wait);
+ put_thread_online();
if (ret) {
errno = ret;
diag("pthread_cond_signal: %s",
if (ret) {
errno = ret;
diag("pthread_cond_signal: %s",
@@
-463,11
+471,13
@@
void *rcu_update_stress_test(void *arg __attribute__((unused)))
{
struct urcu_gp_poll_state poll_state;
{
struct urcu_gp_poll_state poll_state;
- rcu_register_thread();
poll_state = start_poll_synchronize_rcu();
poll_state = start_poll_synchronize_rcu();
- rcu_unregister_thread();
+
+ /* Offline for poll. */
+ put_thread_offline();
while (!poll_state_synchronize_rcu(poll_state))
(void) poll(NULL, 0, 1); /* Wait for 1ms */
while (!poll_state_synchronize_rcu(poll_state))
(void) poll(NULL, 0, 1); /* Wait for 1ms */
+ put_thread_online();
break;
}
}
break;
}
}
@@
-475,6
+485,8
@@
void *rcu_update_stress_test(void *arg __attribute__((unused)))
advance_writer_state(&writer_state);
}
advance_writer_state(&writer_state);
}
+ rcu_unregister_thread();
+
return NULL;
}
return NULL;
}
This page took
0.027422 seconds
and
4
git commands to generate.