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()
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 @@
         __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 @@
     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 @@
 
 /* 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