From 3694ec6c4b644064f7e00b898cd11e138e4f6c09 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 14 May 2014 11:46:08 -0700 Subject: Add a regression test for a long-fixed pthread_once bug. Bug: 1934122 Change-Id: Iae09baedc2c6ed4036521e51718fe9d015bc56b9 --- tests/pthread_test.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'tests/pthread_test.cpp') diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index b9a0c2c8a..fa66d21d9 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -572,6 +572,26 @@ TEST(pthread, pthread_once_smoke) { 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 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; } -- cgit v1.2.3