diff options
author | Yabin Cui <yabinc@google.com> | 2015-03-06 13:48:58 -0800 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2015-03-06 15:16:44 -0800 |
commit | 9d0c79304d2413028aa5c213f7a567f00feccde5 (patch) | |
tree | b9c119c7f8e935abb9466e9253b905a7f485d968 | |
parent | 45ee73a7fbe98cba2ccb007b60c027d27dfca1cb (diff) | |
download | bionic-9d0c79304d2413028aa5c213f7a567f00feccde5.zip bionic-9d0c79304d2413028aa5c213f7a567f00feccde5.tar.gz bionic-9d0c79304d2413028aa5c213f7a567f00feccde5.tar.bz2 |
Remove PTHREAD_ATTR_FLAG_MAIN_THREAD.
Make this change because I think it is more reasonable to check stack info
in pthread_getattr_np. I believe pthread_attr_t is not tied with any thread,
and can't have a flag saying who using it is the main thread.
This change also helps refactor of g_thread_list_lock.
Bug: 19636317
Change-Id: Iedbb85a391ac3e1849dd036d01445dac4bc63db9
-rw-r--r-- | libc/bionic/libc_init_common.cpp | 1 | ||||
-rw-r--r-- | libc/bionic/pthread_attr.cpp | 11 | ||||
-rw-r--r-- | libc/bionic/pthread_internal.h | 3 |
3 files changed, 7 insertions, 8 deletions
diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp index f82ec73..52ca0f2 100644 --- a/libc/bionic/libc_init_common.cpp +++ b/libc/bionic/libc_init_common.cpp @@ -88,7 +88,6 @@ void __libc_init_tls(KernelArgumentBlock& args) { // The main thread has no mmap allocated space for stack or pthread_internal_t. main_thread.mmap_size = 0; pthread_attr_init(&main_thread.attr); - main_thread.attr.flags = PTHREAD_ATTR_FLAG_MAIN_THREAD; main_thread.attr.guard_size = 0; // The main thread has no guard page. main_thread.attr.stack_size = 0; // User code should never see this; we'll compute it when asked. // TODO: the main thread's sched_policy and sched_priority need to be queried. diff --git a/libc/bionic/pthread_attr.cpp b/libc/bionic/pthread_attr.cpp index c65ccc1..be1c252 100644 --- a/libc/bionic/pthread_attr.cpp +++ b/libc/bionic/pthread_attr.cpp @@ -152,9 +152,6 @@ static int __pthread_attr_getstack_main_thread(void** stack_base, size_t* stack_ } int pthread_attr_getstack(const pthread_attr_t* attr, void** stack_base, size_t* stack_size) { - if ((attr->flags & PTHREAD_ATTR_FLAG_MAIN_THREAD) != 0) { - return __pthread_attr_getstack_main_thread(stack_base, stack_size); - } *stack_base = attr->stack_base; *stack_size = attr->stack_size; return 0; @@ -171,7 +168,13 @@ int pthread_attr_getguardsize(const pthread_attr_t* attr, size_t* guard_size) { } int pthread_getattr_np(pthread_t t, pthread_attr_t* attr) { - *attr = reinterpret_cast<pthread_internal_t*>(t)->attr; + pthread_internal_t* thread = reinterpret_cast<pthread_internal_t*>(t); + *attr = thread->attr; + // The main thread's stack information is not stored in thread->attr, and we need to + // collect that at runtime. + if (thread->tid == getpid()) { + return __pthread_attr_getstack_main_thread(&attr->stack_base, &attr->stack_size); + } return 0; } diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h index f131d7a..6ace301 100644 --- a/libc/bionic/pthread_internal.h +++ b/libc/bionic/pthread_internal.h @@ -41,9 +41,6 @@ /* Did the thread exit without freeing pthread_internal_t? */ #define PTHREAD_ATTR_FLAG_ZOMBIE 0x00000004 -/* Is this the main thread? */ -#define PTHREAD_ATTR_FLAG_MAIN_THREAD 0x80000000 - struct pthread_key_data_t { uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below. void* data; |