Loading changes/bug27073 0 → 100644 +4 −0 Original line number Diff line number Diff line 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. src/test/test_threads.c +19 −11 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -279,8 +287,9 @@ test_threads_conditionvar(void *arg) if (!timeout) { tt_int_op(ti->n_shutdown, ==, 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, ==, 2); tt_int_op(ti->n_timeouts, ==, 2); tor_mutex_release(ti->mutex); Loading @@ -301,4 +310,3 @@ struct testcase_t thread_tests[] = { &passthrough_setup, (void*)"tv" }, END_OF_TESTCASES }; Loading
changes/bug27073 0 → 100644 +4 −0 Original line number Diff line number Diff line 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.
src/test/test_threads.c +19 −11 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -279,8 +287,9 @@ test_threads_conditionvar(void *arg) if (!timeout) { tt_int_op(ti->n_shutdown, ==, 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, ==, 2); tt_int_op(ti->n_timeouts, ==, 2); tor_mutex_release(ti->mutex); Loading @@ -301,4 +310,3 @@ struct testcase_t thread_tests[] = { &passthrough_setup, (void*)"tv" }, END_OF_TESTCASES };