diff options
-rw-r--r-- | drivers/unix/thread_posix.cpp | 18 | ||||
-rw-r--r-- | platform/iphone/platform_config.h | 2 | ||||
-rw-r--r-- | platform/osx/platform_config.h | 1 |
3 files changed, 20 insertions, 1 deletions
diff --git a/drivers/unix/thread_posix.cpp b/drivers/unix/thread_posix.cpp index 2f9adb3f6c..b7bcd44783 100644 --- a/drivers/unix/thread_posix.cpp +++ b/drivers/unix/thread_posix.cpp @@ -45,8 +45,8 @@ Thread* ThreadPosix::create_thread_posix() { void *ThreadPosix::thread_callback(void *userdata) { ThreadPosix *t=reinterpret_cast<ThreadPosix*>(userdata); - t->callback(t->user); t->id=(ID)pthread_self(); + t->callback(t->user); return NULL; } @@ -81,8 +81,24 @@ Error ThreadPosix::set_name(const String& p_name) { ERR_FAIL_COND_V(pthread == 0, ERR_UNCONFIGURED); + #ifdef PTHREAD_RENAME_SELF + + // check if thread is the same as caller + int caller = Thread::get_caller_ID(); + int self = get_ID(); + if (caller != self) { + ERR_EXPLAIN("On this platform, thread can only be renamed with calls from the threads to be renamed."); + ERR_FAIL_V(ERR_UNAVAILABLE); + return ERR_UNAVAILABLE; + }; + int err = pthread_setname_np(p_name.utf8().get_data()); + + #else + int err = pthread_setname_np(pthread, p_name.utf8().get_data()); + #endif + return err == 0 ? OK : ERR_INVALID_PARAMETER; }; diff --git a/platform/iphone/platform_config.h b/platform/iphone/platform_config.h index 3cc74099c0..d18ef437b0 100644 --- a/platform/iphone/platform_config.h +++ b/platform/iphone/platform_config.h @@ -31,3 +31,5 @@ #define PLATFORM_REFCOUNT + +#define PTHREAD_RENAME_SELF diff --git a/platform/osx/platform_config.h b/platform/osx/platform_config.h index 285d8d0c02..6a1e9c8bae 100644 --- a/platform/osx/platform_config.h +++ b/platform/osx/platform_config.h @@ -29,3 +29,4 @@ #include <alloca.h> #define GLES2_INCLUDE_H "gl_context/glew.h" #define GLES1_INCLUDE_H "gl_context/glew.h" +#define PTHREAD_RENAME_SELF |