aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_threads.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-09-27 23:20:22 -0400
committerNick Mathewson <nickm@torproject.org>2015-01-14 11:17:43 -0500
commit81354b081b7bb9deabd6c53e48623190b01aab1c (patch)
tree0033562141136bc29c5740f1665ac108c583b13b /src/test/test_threads.c
parent7a63005220938b30df41b51334942d7d79c14cf9 (diff)
downloadtor-81354b081b7bb9deabd6c53e48623190b01aab1c.tar.gz
tor-81354b081b7bb9deabd6c53e48623190b01aab1c.zip
Add unit test for thread IDs.
Diffstat (limited to 'src/test/test_threads.c')
-rw-r--r--src/test/test_threads.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/test/test_threads.c b/src/test/test_threads.c
index d2a61a17d0..2bc24e1edc 100644
--- a/src/test/test_threads.c
+++ b/src/test/test_threads.c
@@ -21,6 +21,10 @@ static char *thread1_name_ = NULL;
/** The name of thread2 for the thread test */
static char *thread2_name_ = NULL;
+static int thread_fns_failed = 0;
+
+static unsigned long thread_fn_tid1, thread_fn_tid2;
+
static void thread_test_func_(void* _s) ATTR_NORETURN;
/** How many iterations have the threads in the unit test run? */
@@ -42,10 +46,12 @@ thread_test_func_(void* _s)
m = thread_test_start1_;
cp = &thread1_name_;
count = &t1_count;
+ thread_fn_tid1 = tor_get_thread_id();
} else {
m = thread_test_start2_;
cp = &thread2_name_;
count = &t2_count;
+ thread_fn_tid2 = tor_get_thread_id();
}
tor_snprintf(buf, sizeof(buf), "%lu", tor_get_thread_id());
@@ -61,6 +67,8 @@ thread_test_func_(void* _s)
}
tor_mutex_acquire(thread_test_mutex_);
strmap_set(thread_test_strmap_, s, *cp);
+ if (in_main_thread())
+ ++thread_fns_failed;
tor_mutex_release(thread_test_mutex_);
tor_mutex_release(m);
@@ -80,7 +88,10 @@ test_threads_basic(void *arg)
tv.tv_sec=0;
tv.tv_usec=100*1000;
#endif
- (void)arg;
+ (void) arg;
+
+ set_main_thread();
+
thread_test_mutex_ = tor_mutex_new();
thread_test_start1_ = tor_mutex_new();
thread_test_start2_ = tor_mutex_new();
@@ -131,6 +142,9 @@ test_threads_basic(void *arg)
!strcmp(strmap_get(thread_test_strmap_, "thread 2"),
strmap_get(thread_test_strmap_, "last to run")));
+ tt_int_op(thread_fns_failed, ==, 0);
+ tt_int_op(thread_fn_tid1, !=, thread_fn_tid2);
+
done:
tor_free(s1);
tor_free(s2);
@@ -188,7 +202,7 @@ cv_test_thr_fn_(void *arg)
tid = i->n_threads++;
tor_mutex_release(i->mutex);
(void) tid;
-
+
tor_mutex_acquire(i->mutex);
while (1) {
if (i->addend) {
@@ -299,4 +313,3 @@ struct testcase_t thread_tests[] = {
&passthrough_setup, (void*)"tv" },
END_OF_TESTCASES
};
-