From ac31bf278d9ed855e6765bb71d64ed19d2b7c0f8 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 10 Jun 2014 04:49:49 -0400 Subject: simplify errno implementation the motivation for the errno_ptr field in the thread structure, which this commit removes, was to allow the main thread's errno to keep its address when lazy thread pointer initialization was used. &errno was evaluated prior to setting up the thread pointer and stored in errno_ptr for the main thread; subsequently created threads would have errno_ptr pointing to their own errno_val in the thread structure. since lazy initialization was removed, there is no need for this extra level of indirection; __errno_location can simply return the address of the thread's errno_val directly. this does cause &errno to change, but the change happens before entry to application code, and thus is not observable. --- src/errno/__errno_location.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/errno') diff --git a/src/errno/__errno_location.c b/src/errno/__errno_location.c index 84191076..49654efd 100644 --- a/src/errno/__errno_location.c +++ b/src/errno/__errno_location.c @@ -3,6 +3,6 @@ int *__errno_location(void) { static int e; - if (libc.has_thread_pointer) return __pthread_self()->errno_ptr; + if (libc.has_thread_pointer) return &__pthread_self()->errno_val; return &e; } -- cgit v1.2.1