Don't corrupt the thread list in static executables.
Several previous changes conspired to make a mess of the thread list
in static binaries. This was most obvious when trying to call
pthread_key_delete(3) on the main thread.
Bug: http://code.google.com/p/android/issues/detail?id=36893
Change-Id: I2a2f553114d8fb40533c481252b410c10656da2e
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 2bd110c..58a809a 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -29,13 +29,14 @@
#define _PTHREAD_INTERNAL_H_
#include <pthread.h>
+#include <stdbool.h>
__BEGIN_DECLS
typedef struct pthread_internal_t
{
struct pthread_internal_t* next;
- struct pthread_internal_t** pref;
+ struct pthread_internal_t** prev;
pthread_attr_t attr;
pid_t kernel_id;
pthread_cond_t join_cond;
@@ -46,7 +47,8 @@
void** tls; /* thread-local storage area */
} pthread_internal_t;
-extern int _init_thread(pthread_internal_t * thread, pid_t kernel_id, pthread_attr_t * attr, void * stack_base);
+int _init_thread(pthread_internal_t* thread, pid_t kernel_id, pthread_attr_t* attr,
+ void* stack_base, bool add_to_thread_list);
void _pthread_internal_add( pthread_internal_t* thread );
pthread_internal_t* __get_thread(void);
@@ -100,9 +102,9 @@
return 0;
}
-extern int __pthread_cond_timedwait(pthread_cond_t*,
+extern int __pthread_cond_timedwait(pthread_cond_t*,
pthread_mutex_t*,
- const struct timespec*,
+ const struct timespec*,
clockid_t);
extern int __pthread_cond_timedwait_relative(pthread_cond_t*,