diff --git a/base/Android.bp b/base/Android.bp index f5000c17b..25ae535a3 100644 --- a/base/Android.bp +++ b/base/Android.bp @@ -61,7 +61,6 @@ cc_defaults { "parsenetaddress.cpp", "process.cpp", "properties.cpp", - "quick_exit.cpp", "stringprintf.cpp", "strings.cpp", "threads.cpp", @@ -154,7 +153,6 @@ cc_test { "parsenetaddress_test.cpp", "process_test.cpp", "properties_test.cpp", - "quick_exit_test.cpp", "result_test.cpp", "scopeguard_test.cpp", "stringprintf_test.cpp", diff --git a/base/include/android-base/quick_exit.h b/base/include/android-base/quick_exit.h deleted file mode 100644 index a03b14f23..000000000 --- a/base/include/android-base/quick_exit.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -// Provide emulation for at_quick_exit/quick_exit on platforms that don't have it. -namespace android { -namespace base { - -// Bionic and glibc have quick_exit, Darwin and Windows don't. -#if !defined(__linux__) - void quick_exit(int exit_code) __attribute__((noreturn)); - int at_quick_exit(void (*func)()); -#else - using ::at_quick_exit; - using ::quick_exit; -#endif -} -} diff --git a/base/quick_exit.cpp b/base/quick_exit.cpp deleted file mode 100644 index e4dd62bfb..000000000 --- a/base/quick_exit.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "android-base/quick_exit.h" - -#if !defined(__linux__) - -#include -#include - -namespace android { -namespace base { - -static auto& quick_exit_mutex = *new std::mutex(); -static auto& quick_exit_handlers = *new std::vector(); - -void quick_exit(int exit_code) { - std::lock_guard lock(quick_exit_mutex); - for (auto it = quick_exit_handlers.rbegin(); it != quick_exit_handlers.rend(); ++it) { - (*it)(); - } - _Exit(exit_code); -} - -int at_quick_exit(void (*func)()) { - std::lock_guard lock(quick_exit_mutex); - quick_exit_handlers.push_back(func); - return 0; -} - -} // namespace base -} // namespace android -#endif diff --git a/base/quick_exit_test.cpp b/base/quick_exit_test.cpp deleted file mode 100644 index 7ca8156ac..000000000 --- a/base/quick_exit_test.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "android-base/quick_exit.h" - -#include - -#include -#include -#include - -#include - -#include "android-base/test_utils.h" - -// These tests are a bit sketchy, since each test run adds global state that affects subsequent -// tests (including ones not in this file!). Exit with 0 in Exiter and stick the at_quick_exit test -// at the end to hack around this. -struct Exiter { - ~Exiter() { - _Exit(0); - } -}; - -TEST(quick_exit, smoke) { - ASSERT_EXIT(android::base::quick_exit(123), testing::ExitedWithCode(123), ""); -} - -TEST(quick_exit, skip_static_destructors) { - static Exiter exiter; - ASSERT_EXIT(android::base::quick_exit(123), testing::ExitedWithCode(123), ""); -} - -TEST(quick_exit, at_quick_exit) { - static int counter = 4; - // "Functions passed to at_quick_exit are called in reverse order of their registration." - ASSERT_EQ(0, android::base::at_quick_exit([]() { _exit(counter); })); - ASSERT_EQ(0, android::base::at_quick_exit([]() { counter += 2; })); - ASSERT_EQ(0, android::base::at_quick_exit([]() { counter *= 10; })); - ASSERT_EXIT(android::base::quick_exit(123), testing::ExitedWithCode(42), ""); -}