Extra logging in pthread_create.
pthread_create returns EAGAIN when it can't allocate a pthread_internal_t, when it can't allocate a stack for the new thread, or when clone(2) fails because there are too many threads. It's useful to be able to know why your pthread_create just failed, so add some logging. Bug: 8470684 (cherry picked from commit cfa089df23ff50fcd5ed3854c54991d30be5fc7e) Change-Id: Ibfc98a84c1817a931f9ae4c2b88762f0edfb6b79
This commit is contained in:
parent
b24b6e1419
commit
96449b3dc1
@ -153,6 +153,7 @@ int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr,
|
||||
|
||||
pthread_internal_t* thread = reinterpret_cast<pthread_internal_t*>(calloc(sizeof(*thread), 1));
|
||||
if (thread == NULL) {
|
||||
__libc_format_log(ANDROID_LOG_WARN, "libc", "pthread_create failed: couldn't allocate thread");
|
||||
return EAGAIN;
|
||||
}
|
||||
thread->allocated_on_heap = true;
|
||||
@ -172,6 +173,7 @@ int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr,
|
||||
thread->attr.stack_base = __create_thread_stack(stack_size, thread->attr.guard_size);
|
||||
if (thread->attr.stack_base == NULL) {
|
||||
free(thread);
|
||||
__libc_format_log(ANDROID_LOG_WARN, "libc", "pthread_create failed: couldn't allocate %zd-byte stack", stack_size);
|
||||
return EAGAIN;
|
||||
}
|
||||
} else {
|
||||
@ -203,6 +205,7 @@ int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr,
|
||||
munmap(thread->attr.stack_base, stack_size);
|
||||
}
|
||||
free(thread);
|
||||
__libc_format_log(ANDROID_LOG_WARN, "libc", "pthread_create failed: clone failed: %s", strerror(errno));
|
||||
return clone_errno;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user