diff --git a/Source/Threading/Threads/AuOSThread.cpp b/Source/Threading/Threads/AuOSThread.cpp index b52e6fad..010c92ec 100644 --- a/Source/Threading/Threads/AuOSThread.cpp +++ b/Source/Threading/Threads/AuOSThread.cpp @@ -611,7 +611,12 @@ namespace Aurora::Threading::Threads #if defined(AURORA_IS_POSIX_DERIVED) this->bLongJmpOnce = false; + + #if defined(POSIX_USE_SIGJMP) && POSIX_USE_SIGJMP == 1 + if (sigsetjmp(env, 1) != 0) + #else if (setjmp(env) != 0) + #endif { Exit(true); return; @@ -1514,7 +1519,12 @@ namespace Aurora::Threading::Threads AuProcess::Exit(0); return true; } + + #if defined(POSIX_USE_SIGJMP) && POSIX_USE_SIGJMP == 1 + ::siglongjmp(env, 1); + #else ::longjmp(env, 1); + #endif } ::pthread_exit(nullptr); #endif diff --git a/Source/Threading/Threads/AuOSThread.hpp b/Source/Threading/Threads/AuOSThread.hpp index 61277256..9fdfc99c 100644 --- a/Source/Threading/Threads/AuOSThread.hpp +++ b/Source/Threading/Threads/AuOSThread.hpp @@ -9,6 +9,9 @@ #if defined(AURORA_IS_POSIX_DERIVED) #include + #if !defined(POSIX_USE_SIGJMP) + #define POSIX_USE_SIGJMP 1 + #endif #endif namespace Aurora::Threading::Threads @@ -85,7 +88,11 @@ namespace Aurora::Threading::Threads private: #if defined(AURORA_IS_POSIX_DERIVED) - jmp_buf env; + #if defined(POSIX_USE_SIGJMP) && POSIX_USE_SIGJMP == 1 + sigjmp_buf env; + #else + jmp_buf env; + #endif #endif Primitives::Mutex tlsLock_; AuUInt32 tls_ {};