[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [tor/master 2/2] testsuite: Prevent the main thread from starving the worker threads
Author: Peter Palfrader <peter@xxxxxxxxxxxxx>
Date: Tue, 13 Apr 2010 00:10:56 +0200
Subject: testsuite: Prevent the main thread from starving the worker threads
Commit: 5e679acc72a2648c38a3ee3a2b05cd5b75906568
---
changes/weasel-testuite-thread-fixes | 5 +++++
src/or/test.c | 9 +++++++++
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/changes/weasel-testuite-thread-fixes b/changes/weasel-testuite-thread-fixes
index 8fed729..4c32c38 100644
--- a/changes/weasel-testuite-thread-fixes
+++ b/changes/weasel-testuite-thread-fixes
@@ -1,3 +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/or/test.c b/src/or/test.c
index 652a4ee..14ba953 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -2326,6 +2326,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. */
@@ -2355,6 +2360,10 @@ 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_acquire(_thread_test_start1);
--
1.6.5