aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-03-14 06:55:57 +1000
committerteor <teor@torproject.org>2019-03-14 06:55:57 +1000
commitc03b1b3f08b0588c9ba36b2097d372cb62cfdc22 (patch)
tree00cdc4db8b94312f62d95abc0e69c65f7cfa75dc
parent5606cfae472a4e49d07bb14f4dfa336a8ded3930 (diff)
parent2840580cf2753ac900b84f604989f9156708cdb3 (diff)
downloadtor-c03b1b3f08b0588c9ba36b2097d372cb62cfdc22.tar.gz
tor-c03b1b3f08b0588c9ba36b2097d372cb62cfdc22.zip
Merge remote-tracking branch 'tor-github/pr/794' into maint-0.3.4
-rw-r--r--changes/bug270734
-rw-r--r--src/test/test_threads.c30
2 files changed, 23 insertions, 11 deletions
diff --git a/changes/bug27073 b/changes/bug27073
new file mode 100644
index 0000000000..851e7f0df6
--- /dev/null
+++ b/changes/bug27073
@@ -0,0 +1,4 @@
+ o Minor bugfixes (testing):
+ - Revise the "conditionvar_timeout" test so that it succeeds even
+ on heavily loaded systems where the test threads are not scheduled
+ within 200 msec. Fixes bug 27073; bugfix on 0.2.6.3-alpha.
diff --git a/src/test/test_threads.c b/src/test/test_threads.c
index ed6d8f04aa..4f37a40cc7 100644
--- a/src/test/test_threads.c
+++ b/src/test/test_threads.c
@@ -234,25 +234,33 @@ test_threads_conditionvar(void *arg)
if (timeout) {
ti->tv = &msec100;
}
+
+#define SPIN_UNTIL(condition,sleep_msec) \
+ while (1) { \
+ tor_mutex_acquire(ti->mutex); \
+ if (condition) { \
+ break; \
+ } \
+ tor_mutex_release(ti->mutex); \
+ tor_sleep_msec(sleep_msec); \
+ }
+
spawn_func(cv_test_thr_fn_, ti);
spawn_func(cv_test_thr_fn_, ti);
spawn_func(cv_test_thr_fn_, ti);
spawn_func(cv_test_thr_fn_, ti);
- tor_mutex_acquire(ti->mutex);
+ SPIN_UNTIL(ti->n_threads == 4, 10);
+
+ time_t started_at = time(NULL);
+
ti->addend = 7;
ti->shutdown = 1;
tor_cond_signal_one(ti->cond);
tor_mutex_release(ti->mutex);
#define SPIN() \
- while (1) { \
- tor_mutex_acquire(ti->mutex); \
- if (ti->addend == 0) { \
- break; \
- } \
- tor_mutex_release(ti->mutex); \
- }
+ SPIN_UNTIL(ti->addend == 0, 0)
SPIN();
@@ -279,8 +287,9 @@ test_threads_conditionvar(void *arg)
if (!timeout) {
tt_int_op(ti->n_shutdown, OP_EQ, 4);
} else {
- tor_sleep_msec(200);
- tor_mutex_acquire(ti->mutex);
+ const int GIVE_UP_AFTER_SEC = 30;
+ SPIN_UNTIL((ti->n_timeouts == 2 ||
+ time(NULL) >= started_at + GIVE_UP_AFTER_SEC), 10);
tt_int_op(ti->n_shutdown, OP_EQ, 2);
tt_int_op(ti->n_timeouts, OP_EQ, 2);
tor_mutex_release(ti->mutex);
@@ -301,4 +310,3 @@ struct testcase_t thread_tests[] = {
&passthrough_setup, (void*)"tv" },
END_OF_TESTCASES
};
-