|
@@ -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
|
|
|
};
|
|
|
-
|