diff options
author | Chris Robinson <[email protected]> | 2013-10-26 12:39:19 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2013-10-26 12:39:19 -0700 |
commit | ff5277f4d7057f481a820cf64e2c2db4687bfd5f (patch) | |
tree | 8ad3dcfddc5354b25c74a96011e3532b724382ac /Alc | |
parent | 6617985a4ee765a86d9175e0e86197c03a8f1b8c (diff) |
Add a method to set the running thread's name
Diffstat (limited to 'Alc')
-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)) { |