projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
track all live threads in an AS-safe, fully-consistent linked list
[musl]
/
src
/
env
/
__init_tls.c
diff --git
a/src/env/__init_tls.c
b/src/env/__init_tls.c
index
842886f
..
f1874f2
100644
(file)
--- a/
src/env/__init_tls.c
+++ b/
src/env/__init_tls.c
@@
-8,6
+8,8
@@
#include "atomic.h"
#include "syscall.h"
#include "atomic.h"
#include "syscall.h"
+volatile int __thread_list_lock;
+
int __init_tp(void *p)
{
pthread_t td = p;
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;
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->locale = &libc.global_locale;
td->robust_list.head = &td->robust_list.head;
+ td->next = td->prev = td;
return 0;
}
return 0;
}