diff options
author | Elliott Hughes <enh@google.com> | 2012-03-12 17:10:46 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-03-12 17:10:46 -0700 |
commit | be741d472868a8ffcb455588f18cda889b0f465c (patch) | |
tree | 4c27624ea016135ce74398d7d4579e50e3583170 | |
parent | 6d074bb71a316f73f35f4430a71fa706c46d4b75 (diff) | |
parent | 2f460fbee9abe2936175379c49c6618de7421233 (diff) | |
download | bionic-be741d472868a8ffcb455588f18cda889b0f465c.zip bionic-be741d472868a8ffcb455588f18cda889b0f465c.tar.gz bionic-be741d472868a8ffcb455588f18cda889b0f465c.tar.bz2 |
am 2f460fbe: am 73b5cad9: Merge "bionic: Fix wrong kernel_id in pthread descriptor after fork()"
* commit '2f460fbee9abe2936175379c49c6618de7421233':
bionic: Fix wrong kernel_id in pthread descriptor after fork()
-rw-r--r-- | libc/bionic/fork.c | 4 | ||||
-rw-r--r-- | libc/bionic/pthread.c | 11 | ||||
-rw-r--r-- | libc/private/bionic_pthread.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/libc/bionic/fork.c b/libc/bionic/fork.c index 0eedb01..2d5a10a 100644 --- a/libc/bionic/fork.c +++ b/libc/bionic/fork.c @@ -27,6 +27,7 @@ */ #include <unistd.h> #include "pthread_internal.h" +#include "bionic_pthread.h" #include "cpuacct.h" extern int __fork(void); @@ -48,6 +49,9 @@ int fork(void) __timer_table_start_stop(0); __bionic_atfork_run_parent(); } else { + /* Adjusting the kernel id after a fork */ + (void)__pthread_settid(pthread_self(), gettid()); + /* * Newly created process must update cpu accounting. * Call cpuacct_add passing in our uid, which will take diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c index 3435d21..885adcc 100644 --- a/libc/bionic/pthread.c +++ b/libc/bionic/pthread.c @@ -2011,3 +2011,14 @@ pid_t __pthread_gettid(pthread_t thid) pthread_internal_t* thread = (pthread_internal_t*)thid; return thread->kernel_id; } + +int __pthread_settid(pthread_t thid, pid_t tid) +{ + if (thid == 0) + return EINVAL; + + pthread_internal_t* thread = (pthread_internal_t*)thid; + thread->kernel_id = tid; + + return 0; +} diff --git a/libc/private/bionic_pthread.h b/libc/private/bionic_pthread.h index 07bcbd4..28d6ad8 100644 --- a/libc/private/bionic_pthread.h +++ b/libc/private/bionic_pthread.h @@ -35,6 +35,7 @@ __BEGIN_DECLS /* Internal, not an NDK API */ extern pid_t __pthread_gettid(pthread_t thid); +extern int __pthread_settid(pthread_t thid, pid_t tid); __END_DECLS |