track all live threads in an AS-safe, fully-consistent linked list
[musl] / src / internal / pthread_impl.h
index 26e6e1d..508b40b 100644 (file)
@@ -17,7 +17,8 @@ struct pthread {
        /* Part 1 -- these fields may be external or
         * internal (accessed via asm) ABI. Do not change. */
        struct pthread *self;
-       void **dtv, *unused1, *unused2;
+       uintptr_t *dtv;
+       struct pthread *prev, *next; /* non-ABI */
        uintptr_t sysinfo;
        uintptr_t canary, canary2;
 
@@ -28,15 +29,12 @@ struct pthread {
        volatile int cancel;
        volatile unsigned char canceldisable, cancelasync;
        unsigned char tsd_used:1;
-       unsigned char unblock_cancel:1;
        unsigned char dlerror_flag:1;
        unsigned char *map_base;
        size_t map_size;
        void *stack;
        size_t stack_size;
        size_t guard_size;
-       void *start_arg;
-       void *(*start)(void *);
        void *result;
        struct __ptcb *cancelbuf;
        void **tsd;
@@ -54,23 +52,13 @@ struct pthread {
        /* Part 3 -- the positions of these fields relative to
         * the end of the structure is external and internal ABI. */
        uintptr_t canary_at_end;
-       void **dtv_copy;
-};
-
-struct start_sched_args {
-       void *start_arg;
-       void *(*start_fn)(void *);
-       sigset_t mask;
-       pthread_attr_t *attr;
-       volatile int futex;
+       uintptr_t *dtv_copy;
 };
 
 enum {
-       DT_EXITED = 0,
-       DT_EXITING,
+       DT_EXITING = 0,
        DT_JOINABLE,
        DT_DETACHED,
-       DT_DYNAMIC,
 };
 
 struct __timer {
@@ -155,6 +143,7 @@ extern hidden volatile int __block_new_threads;
 extern hidden volatile size_t __pthread_tsd_size;
 extern hidden void *__pthread_tsd_main[];
 extern hidden volatile int __aio_fut;
+extern hidden volatile int __eintr_valid_flag;
 
 hidden int __clone(int (*)(void *), void *, int, void *, ...);
 hidden int __set_thread_area(void *);
@@ -182,11 +171,20 @@ hidden void __acquire_ptc(void);
 hidden void __release_ptc(void);
 hidden void __inhibit_ptc(void);
 
-extern hidden size_t __default_stacksize;
-extern hidden size_t __default_guardsize;
+hidden void __tl_lock(void);
+hidden void __tl_unlock(void);
+hidden void __tl_sync(pthread_t);
+
+extern hidden volatile int __thread_list_lock;
+
+extern hidden unsigned __default_stacksize;
+extern hidden unsigned __default_guardsize;
+
+#define DEFAULT_STACK_SIZE 131072
+#define DEFAULT_GUARD_SIZE 8192
 
-#define DEFAULT_STACK_SIZE 81920
-#define DEFAULT_GUARD_SIZE 4096
+#define DEFAULT_STACK_MAX (8<<20)
+#define DEFAULT_GUARD_MAX (1<<20)
 
 #define __ATTRP_C11_THREAD ((void*)(uintptr_t)-1)