|
@@ -20,6 +20,9 @@
|
|
|
|
|
|
JPH_SUPPRESS_WARNING_POP
|
|
|
#endif
|
|
|
+#ifdef JPH_PLATFORM_LINUX
|
|
|
+ #include <sys/prctl.h>
|
|
|
+#endif
|
|
|
|
|
|
JPH_NAMESPACE_BEGIN
|
|
|
|
|
@@ -231,38 +234,43 @@ void JobSystemThreadPool::QueueJobs(Job **inJobs, uint inNumJobs)
|
|
|
}
|
|
|
|
|
|
#if defined(JPH_PLATFORM_WINDOWS) && !defined(JPH_COMPILER_MINGW) // MinGW doesn't support __try/__except
|
|
|
-
|
|
|
-// Sets the current thread name in MSVC debugger
|
|
|
-static void SetThreadName(const char *inName)
|
|
|
-{
|
|
|
- #pragma pack(push, 8)
|
|
|
-
|
|
|
- struct THREADNAME_INFO
|
|
|
+ // Sets the current thread name in MSVC debugger
|
|
|
+ static void SetThreadName(const char *inName)
|
|
|
{
|
|
|
- DWORD dwType; // Must be 0x1000.
|
|
|
- LPCSTR szName; // Pointer to name (in user addr space).
|
|
|
- DWORD dwThreadID; // Thread ID (-1=caller thread).
|
|
|
- DWORD dwFlags; // Reserved for future use, must be zero.
|
|
|
- };
|
|
|
+ #pragma pack(push, 8)
|
|
|
|
|
|
- #pragma pack(pop)
|
|
|
+ struct THREADNAME_INFO
|
|
|
+ {
|
|
|
+ DWORD dwType; // Must be 0x1000.
|
|
|
+ LPCSTR szName; // Pointer to name (in user addr space).
|
|
|
+ DWORD dwThreadID; // Thread ID (-1=caller thread).
|
|
|
+ DWORD dwFlags; // Reserved for future use, must be zero.
|
|
|
+ };
|
|
|
|
|
|
- THREADNAME_INFO info;
|
|
|
- info.dwType = 0x1000;
|
|
|
- info.szName = inName;
|
|
|
- info.dwThreadID = (DWORD)-1;
|
|
|
- info.dwFlags = 0;
|
|
|
+ #pragma pack(pop)
|
|
|
|
|
|
- __try
|
|
|
- {
|
|
|
- RaiseException(0x406D1388, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR *)&info);
|
|
|
+ THREADNAME_INFO info;
|
|
|
+ info.dwType = 0x1000;
|
|
|
+ info.szName = inName;
|
|
|
+ info.dwThreadID = (DWORD)-1;
|
|
|
+ info.dwFlags = 0;
|
|
|
+
|
|
|
+ __try
|
|
|
+ {
|
|
|
+ RaiseException(0x406D1388, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR *)&info);
|
|
|
+ }
|
|
|
+ __except(EXCEPTION_EXECUTE_HANDLER)
|
|
|
+ {
|
|
|
+ }
|
|
|
}
|
|
|
- __except(EXCEPTION_EXECUTE_HANDLER)
|
|
|
+#elif defined(JPH_PLATFORM_LINUX)
|
|
|
+ static void SetThreadName(const char *inName)
|
|
|
{
|
|
|
+ char truncated_name[16] = { 0 };
|
|
|
+ strncpy(truncated_name, inName, min(sizeof(truncated_name), 15ul));
|
|
|
+ prctl(PR_SET_NAME, truncated_name, 0, 0, 0);
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-#endif // JPH_PLATFORM_WINDOWS && !JPH_COMPILER_MINGW
|
|
|
+#endif // JPH_PLATFORM_LINUX
|
|
|
|
|
|
void JobSystemThreadPool::ThreadMain(int inThreadIndex)
|
|
|
{
|
|
@@ -270,7 +278,7 @@ void JobSystemThreadPool::ThreadMain(int inThreadIndex)
|
|
|
char name[64];
|
|
|
snprintf(name, sizeof(name), "Worker %d", int(inThreadIndex + 1));
|
|
|
|
|
|
-#if defined(JPH_PLATFORM_WINDOWS) && !defined(JPH_COMPILER_MINGW)
|
|
|
+#if (defined(JPH_PLATFORM_WINDOWS) && !defined(JPH_COMPILER_MINGW)) || defined(JPH_PLATFORM_LINUX)
|
|
|
SetThreadName(name);
|
|
|
#endif // JPH_PLATFORM_WINDOWS && !JPH_COMPILER_MINGW
|
|
|
|