diff options
Diffstat (limited to 'Alc/helpers.c')
-rw-r--r-- | Alc/helpers.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Alc/helpers.c b/Alc/helpers.c index 1eadc99c..43f03462 100644 --- a/Alc/helpers.c +++ b/Alc/helpers.c @@ -269,6 +269,44 @@ void RestoreFPUMode(const FPUCtl *ctl) } +void SetThreadName(const char *name) +{ +#if defined(HAVE_PTHREAD_SETNAME_NP) +#if defined(__GNUC__) + if(pthread_setname_np(pthread_self(), name) != 0) +#elif defined(__APPLE__) + if(pthread_setname_np(name) != 0) +#endif + ERR("Failed to set thread name to \"%s\": %s\n", name, strerror(errno)); +#elif defined(HAVE_PTHREAD_SET_NAME_NP) + pthread_set_name_np(pthread_self(), name); +#elif defined(_MSC_VER) +#define MS_VC_EXCEPTION 0x406D1388 + struct { + 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. + } info; + info.dwType = 0x1000; + info.szName = name; + info.dwThreadID = -1; + info.dwFlags = 0; + + __try + { + RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info); + } + __except(EXCEPTION_CONTINUE_EXECUTION) + { + } +#undef MS_VC_EXCEPTION +#else + WARN("Can't set thread name to \"%s\"\n", name); +#endif +} + + #ifdef _WIN32 void pthread_once(pthread_once_t *once, void (*callback)(void)) { |