Add a regression test for a long-fixed pthread_once bug.

Bug: 1934122
Change-Id: Iae09baedc2c6ed4036521e51718fe9d015bc56b9
This commit is contained in:
Elliott Hughes 2014-05-14 11:46:08 -07:00
parent e6c27a7af7
commit 3694ec6c4b
1 changed files with 20 additions and 0 deletions

View File

@ -572,6 +572,26 @@ TEST(pthread, pthread_once_smoke) {
ASSERT_EQ(1, g_once_fn_call_count); ASSERT_EQ(1, g_once_fn_call_count);
} }
static std::string pthread_once_1934122_result = "";
static void Routine2() {
pthread_once_1934122_result += "2";
}
static void Routine1() {
pthread_once_t once_control_2 = PTHREAD_ONCE_INIT;
pthread_once_1934122_result += "1";
pthread_once(&once_control_2, &Routine2);
}
TEST(pthread, pthread_once_1934122) {
// Very old versions of Android couldn't call pthread_once from a
// pthread_once init routine. http://b/1934122.
pthread_once_t once_control_1 = PTHREAD_ONCE_INIT;
ASSERT_EQ(0, pthread_once(&once_control_1, &Routine1));
ASSERT_EQ("12", pthread_once_1934122_result);
}
static int g_atfork_prepare_calls = 0; static int g_atfork_prepare_calls = 0;
static void AtForkPrepare1() { g_atfork_prepare_calls = (g_atfork_prepare_calls << 4) | 1; } static void AtForkPrepare1() { g_atfork_prepare_calls = (g_atfork_prepare_calls << 4) | 1; }
static void AtForkPrepare2() { g_atfork_prepare_calls = (g_atfork_prepare_calls << 4) | 2; } static void AtForkPrepare2() { g_atfork_prepare_calls = (g_atfork_prepare_calls << 4) | 2; }