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
This commit is contained in:
parent
45ee73a7fb
commit
9d0c79304d
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user