diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-04-12 18:22:06 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-04-12 18:22:06 -0400 |
commit | 7221d15acc87d2438aba7e3c261c2fc460479a01 (patch) | |
tree | b18a7d0af4d6b181d023f132e2b2167da94cadce | |
parent | 311aca5a3472cd318b72ca21d7a530182154e75c (diff) | |
parent | 5e679acc72a2648c38a3ee3a2b05cd5b75906568 (diff) | |
download | tor-7221d15acc87d2438aba7e3c261c2fc460479a01.tar tor-7221d15acc87d2438aba7e3c261c2fc460479a01.tar.gz |
Merge commit 'origin/maint-0.2.1'
Conflicts:
src/or/test.c
-rw-r--r-- | changes/weasel-testuite-thread-fixes | 8 | ||||
-rw-r--r-- | src/test/test_util.c | 13 |
2 files changed, 19 insertions, 2 deletions
diff --git a/changes/weasel-testuite-thread-fixes b/changes/weasel-testuite-thread-fixes new file mode 100644 index 000000000..4c32c3881 --- /dev/null +++ b/changes/weasel-testuite-thread-fixes @@ -0,0 +1,8 @@ + o Minor bugfixes: + - Testsuite: In the util/threads test no longer free the test_mutex + before all worker threads have finished. + - Testsuite: The master thread could starve the worker threads quite + badly on certain systems, causing them to run only partially in + the allowed window. This resulted in test failures. Now the master + thread sleeps occasionally for a few microseconds while the two + worker-threads compete for the mutex. diff --git a/src/test/test_util.c b/src/test/test_util.c index ad5a27e51..bba96325c 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -448,6 +448,11 @@ test_util_threads(void) char *s1 = NULL, *s2 = NULL; int done = 0, timedout = 0; time_t started; +#ifndef MS_WINDOWS + struct timeval tv; + tv.tv_sec=0; + tv.tv_usec=10; +#endif #ifndef TOR_IS_MULTITHREADED /* Skip this test if we aren't threading. We should be threading most * everywhere by now. */ @@ -477,14 +482,18 @@ test_util_threads(void) timedout = done = 1; } tor_mutex_release(_thread_test_mutex); +#ifndef MS_WINDOWS + /* Prevent the main thread from starving the worker threads. */ + select(0, NULL, NULL, NULL, &tv); +#endif } - tor_mutex_free(_thread_test_mutex); - tor_mutex_acquire(_thread_test_start1); tor_mutex_release(_thread_test_start1); tor_mutex_acquire(_thread_test_start2); tor_mutex_release(_thread_test_start2); + tor_mutex_free(_thread_test_mutex); + if (timedout) { printf("\nTimed out: %d %d", t1_count, t2_count); test_assert(strmap_get(_thread_test_strmap, "thread 1")); |