am be741d47: am 2f460fbe: am 73b5cad9: Merge "bionic: Fix wrong kernel_id in pthread descriptor after fork()"

* commit 'be741d472868a8ffcb455588f18cda889b0f465c':
  bionic: Fix wrong kernel_id in pthread descriptor after fork()
This commit is contained in:
Elliott Hughes 2012-03-12 17:12:35 -07:00 committed by Android Git Automerger
commit 76d56cf4a9
3 changed files with 16 additions and 0 deletions

View File

@ -27,6 +27,7 @@
*/ */
#include <unistd.h> #include <unistd.h>
#include "pthread_internal.h" #include "pthread_internal.h"
#include "bionic_pthread.h"
#include "cpuacct.h" #include "cpuacct.h"
extern int __fork(void); extern int __fork(void);
@ -48,6 +49,9 @@ int fork(void)
__timer_table_start_stop(0); __timer_table_start_stop(0);
__bionic_atfork_run_parent(); __bionic_atfork_run_parent();
} else { } else {
/* Adjusting the kernel id after a fork */
(void)__pthread_settid(pthread_self(), gettid());
/* /*
* Newly created process must update cpu accounting. * Newly created process must update cpu accounting.
* Call cpuacct_add passing in our uid, which will take * Call cpuacct_add passing in our uid, which will take

View File

@ -2292,3 +2292,14 @@ pid_t __pthread_gettid(pthread_t thid)
pthread_internal_t* thread = (pthread_internal_t*)thid; pthread_internal_t* thread = (pthread_internal_t*)thid;
return thread->kernel_id; 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;
}

View File

@ -35,6 +35,7 @@ __BEGIN_DECLS
/* Internal, not an NDK API */ /* Internal, not an NDK API */
extern pid_t __pthread_gettid(pthread_t thid); extern pid_t __pthread_gettid(pthread_t thid);
extern int __pthread_settid(pthread_t thid, pid_t tid);
__END_DECLS __END_DECLS