track all live threads in an AS-safe, fully-consistent linked list
[musl] / src / env / __init_tls.c
index 842886f..f1874f2 100644 (file)
@@ -8,6 +8,8 @@
 #include "atomic.h"
 #include "syscall.h"
 
+volatile int __thread_list_lock;
+
 int __init_tp(void *p)
 {
        pthread_t td = p;
@@ -16,9 +18,10 @@ int __init_tp(void *p)
        if (r < 0) return -1;
        if (!r) libc.can_do_threads = 1;
        td->detach_state = DT_JOINABLE;
-       td->tid = __syscall(SYS_set_tid_address, &td->detach_state);
+       td->tid = __syscall(SYS_set_tid_address, &__thread_list_lock);
        td->locale = &libc.global_locale;
        td->robust_list.head = &td->robust_list.head;
+       td->next = td->prev = td;
        return 0;
 }