Fix pthread test race conditions.
Guarantee that threads live long enough for us to fiddle with them.
Bug: http://b/68768209
Test: ran tests
Change-Id: I06b1bb64fec9f8181b5f5b43ca1030e255fdccc1
diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp
index 5eef35a..183312d 100755
--- a/tests/pthread_test.cpp
+++ b/tests/pthread_test.cpp
@@ -199,9 +199,11 @@
SpinFunctionHelper() {
SpinFunctionHelper::spin_flag_ = true;
}
+
~SpinFunctionHelper() {
UnSpin();
}
+
auto GetFunction() -> void* (*)(void*) {
return SpinFunctionHelper::SpinFn;
}
@@ -2233,12 +2235,14 @@
ASSERT_EQ(0, pthread_attr_init(&attr));
ASSERT_EQ(0, pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED));
+ SpinFunctionHelper spin_helper;
pthread_t t;
- ASSERT_EQ(0, pthread_create(&t, &attr, IdFn, nullptr));
+ ASSERT_EQ(0, pthread_create(&t, &attr, spin_helper.GetFunction(), nullptr));
int actual_policy;
sched_param actual_param;
ASSERT_EQ(0, pthread_getschedparam(t, &actual_policy, &actual_param));
ASSERT_EQ(SCHED_FIFO, actual_policy);
+ spin_helper.UnSpin();
ASSERT_EQ(0, pthread_join(t, nullptr));
}
@@ -2256,12 +2260,14 @@
ASSERT_EQ(0, pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED));
ASSERT_EQ(0, pthread_attr_setschedpolicy(&attr, SCHED_OTHER));
+ SpinFunctionHelper spin_helper;
pthread_t t;
- ASSERT_EQ(0, pthread_create(&t, &attr, IdFn, nullptr));
+ ASSERT_EQ(0, pthread_create(&t, &attr, spin_helper.GetFunction(), nullptr));
int actual_policy;
sched_param actual_param;
ASSERT_EQ(0, pthread_getschedparam(t, &actual_policy, &actual_param));
ASSERT_EQ(SCHED_OTHER, actual_policy);
+ spin_helper.UnSpin();
ASSERT_EQ(0, pthread_join(t, nullptr));
}
@@ -2278,11 +2284,13 @@
ASSERT_EQ(0, pthread_attr_init(&attr));
ASSERT_EQ(0, pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED));
+ SpinFunctionHelper spin_helper;
pthread_t t;
- ASSERT_EQ(0, pthread_create(&t, &attr, IdFn, nullptr));
+ ASSERT_EQ(0, pthread_create(&t, &attr, spin_helper.GetFunction(), nullptr));
int actual_policy;
sched_param actual_param;
ASSERT_EQ(0, pthread_getschedparam(t, &actual_policy, &actual_param));
ASSERT_EQ(SCHED_FIFO | SCHED_RESET_ON_FORK, actual_policy);
+ spin_helper.UnSpin();
ASSERT_EQ(0, pthread_join(t, nullptr));
}