Merge "Clean up __isthreaded."
am: d785b4465e
Change-Id: I66192ac99b40c7fa7359a147f2d1ca86859b048d
This commit is contained in:
commit
51c1351672
|
@ -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 <unistd.h> because we stupidly used to inline
|
||||
// getpagesize() and __getpageshift(). Needed for backwards compatibility with old NDK apps.
|
||||
unsigned int __page_size = PAGE_SIZE;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue