diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 016b47694..dbacf18f0 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -52,6 +52,9 @@ extern "C" { // LP64 doesn't need to support any legacy cruft. #if !defined(__LP64__) +// By the time any NDK-built code is running, there are plenty of threads. +int __isthreaded = 1; + // These were accidentally declared in because we stupidly used to inline // getpagesize() and __getpageshift(). Needed for backwards compatibility with old NDK apps. unsigned int __page_size = PAGE_SIZE; diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp index 9f4481fd2..9197aa3fe 100644 --- a/libc/bionic/pthread_create.cpp +++ b/libc/bionic/pthread_create.cpp @@ -49,8 +49,6 @@ void __init_user_desc(struct user_desc*, bool, void*); #endif -extern "C" int __isthreaded; - // This code is used both by each new pthread and the code that initializes the main thread. void __init_tls(pthread_internal_t* thread) { // Slot 0 must point to itself. The x86 Linux kernel reads the TLS from %fs:0. @@ -230,9 +228,6 @@ int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr, void* (*start_routine)(void*), void* arg) { ErrnoRestorer errno_restorer; - // Inform the rest of the C library that at least one thread was created. - __isthreaded = 1; - pthread_attr_t thread_attr; if (attr == NULL) { pthread_attr_init(&thread_attr); diff --git a/libc/stdlib/exit.c b/libc/stdlib/exit.c index 10ce674ab..510cb83c8 100644 --- a/libc/stdlib/exit.c +++ b/libc/stdlib/exit.c @@ -1,4 +1,3 @@ -/* $OpenBSD: exit.c,v 1.12 2007/09/03 14:40:16 millert Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. @@ -28,39 +27,13 @@ * SUCH DAMAGE. */ -#include -#include -#include #include -/* - * This variable is zero until a process has created a thread. - * It is used to avoid calling locking functions in libc when they - * are not required. By default, libc is intended to be(come) - * thread-safe, but without a (significant) penalty to non-threaded - * processes. - */ -int __isthreaded = 0; - -/* BEGIN android-added: using __cxa_finalize and __cxa_thread_finalize */ extern void __cxa_finalize(void* dso_handle); extern void __cxa_thread_finalize(); -/* END android-added */ -/* - * Exit, flushing stdio buffers if necessary. - */ -void -exit(int status) -{ - /* BEGIN android-added: call thread_local d-tors */ +void exit(int status) { __cxa_thread_finalize(); - /* END android-added */ - - /* - * Call functions registered by atexit() or _cxa_atexit() - * (including the stdio cleanup routine) and then _exit(). - */ - __cxa_finalize(NULL); - _exit(status); + __cxa_finalize(NULL); + _exit(status); } diff --git a/libc/upstream-openbsd/android/include/openbsd-compat.h b/libc/upstream-openbsd/android/include/openbsd-compat.h index caea45a93..bec860b83 100644 --- a/libc/upstream-openbsd/android/include/openbsd-compat.h +++ b/libc/upstream-openbsd/android/include/openbsd-compat.h @@ -81,7 +81,4 @@ __LIBC_HIDDEN__ extern const short _C_tolower_[]; __LIBC_HIDDEN__ extern char* __findenv(const char*, int, int*); __LIBC_HIDDEN__ extern char* _mktemp(char*); -/* TODO: hide this when android_support.a is fixed (http://b/16298580).*/ -/*__LIBC_HIDDEN__*/ extern int __isthreaded; - #endif