diff --git a/repos/libports/src/lib/libc/errno.cc b/repos/libports/src/lib/libc/errno.cc index 806107683..63cbf0022 100644 --- a/repos/libports/src/lib/libc/errno.cc +++ b/repos/libports/src/lib/libc/errno.cc @@ -13,9 +13,9 @@ * under the terms of the GNU Affero General Public License version 3. */ -static int private_errno; +#include extern "C" int *__error(void) { - return &private_errno; + return &pthread_self()->thread_local_errno; } diff --git a/repos/libports/src/lib/libc/internal/pthread.h b/repos/libports/src/lib/libc/internal/pthread.h index 674020c28..e5b9616f8 100644 --- a/repos/libports/src/lib/libc/internal/pthread.h +++ b/repos/libports/src/lib/libc/internal/pthread.h @@ -180,6 +180,8 @@ struct Libc::Pthread : Noncopyable, Thread::Tls::Base public: + int thread_local_errno = 0; + /** * Constructor for threads created via 'pthread_create' */