mirror of
https://github.com/fluencelabs/musl
synced 2025-06-22 11:11:54 +00:00
simplify multi-threaded errno, eliminate useless function pointer
This commit is contained in:
@ -1,9 +1,8 @@
|
|||||||
#include <errno.h>
|
#include "pthread_impl.h"
|
||||||
#include "libc.h"
|
|
||||||
|
|
||||||
int *__errno_location(void)
|
int *__errno_location(void)
|
||||||
{
|
{
|
||||||
static int e;
|
static int e;
|
||||||
if (libc.errno_location) return libc.errno_location();
|
if (libc.main_thread) return __pthread_self()->errno_ptr;
|
||||||
return &e;
|
return &e;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
struct __libc {
|
struct __libc {
|
||||||
int *(*errno_location)(void);
|
void *main_thread;
|
||||||
int threaded;
|
int threaded;
|
||||||
int canceldisable;
|
int canceldisable;
|
||||||
int (*atexit)(void (*)(void));
|
int (*atexit)(void (*)(void));
|
||||||
@ -14,7 +14,6 @@ struct __libc {
|
|||||||
volatile int threads_minus_1;
|
volatile int threads_minus_1;
|
||||||
int ofl_lock;
|
int ofl_lock;
|
||||||
FILE *ofl_head;
|
FILE *ofl_head;
|
||||||
void *main_thread;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,21 +6,16 @@ static struct pthread main_thread;
|
|||||||
static const void *dummy[1] = { 0 };
|
static const void *dummy[1] = { 0 };
|
||||||
weak_alias(dummy, __pthread_tsd_main);
|
weak_alias(dummy, __pthread_tsd_main);
|
||||||
|
|
||||||
static int *errno_location()
|
|
||||||
{
|
|
||||||
return __pthread_self()->errno_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int init_main_thread()
|
static int init_main_thread()
|
||||||
{
|
{
|
||||||
if (__set_thread_area(&main_thread) < 0) return -1;
|
if (__set_thread_area(&main_thread) < 0) return -1;
|
||||||
main_thread.canceldisable = libc.canceldisable;
|
main_thread.canceldisable = libc.canceldisable;
|
||||||
main_thread.tsd = (void **)__pthread_tsd_main;
|
main_thread.tsd = (void **)__pthread_tsd_main;
|
||||||
main_thread.self = libc.main_thread = &main_thread;
|
|
||||||
main_thread.errno_ptr = __errno_location();
|
main_thread.errno_ptr = __errno_location();
|
||||||
libc.errno_location = errno_location;
|
main_thread.self = &main_thread;
|
||||||
main_thread.tid = main_thread.pid =
|
main_thread.tid = main_thread.pid =
|
||||||
__syscall(SYS_set_tid_address, &main_thread.tid);
|
__syscall(SYS_set_tid_address, &main_thread.tid);
|
||||||
|
libc.main_thread = &main_thread;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user