summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/unix/thread_posix.cpp18
-rw-r--r--platform/iphone/platform_config.h2
-rw-r--r--platform/osx/platform_config.h1
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