|
@@ -47,7 +47,8 @@ uint64_t Thread::_thread_id_hash(const std::thread::id &p_t) {
|
|
|
}
|
|
|
|
|
|
Thread::ID Thread::main_thread_id = _thread_id_hash(std::this_thread::get_id());
|
|
|
-thread_local Thread::ID Thread::caller_id = 0;
|
|
|
+static thread_local Thread::ID caller_id = 0;
|
|
|
+static thread_local bool caller_id_cached = false;
|
|
|
|
|
|
void Thread::_set_platform_funcs(
|
|
|
Error (*p_set_name_func)(const String &),
|
|
@@ -61,7 +62,9 @@ void Thread::_set_platform_funcs(
|
|
|
}
|
|
|
|
|
|
void Thread::callback(Thread *p_self, const Settings &p_settings, Callback p_callback, void *p_userdata) {
|
|
|
- Thread::caller_id = _thread_id_hash(p_self->thread.get_id());
|
|
|
+ caller_id = _thread_id_hash(p_self->thread.get_id());
|
|
|
+ caller_id_cached = true;
|
|
|
+
|
|
|
if (set_priority_func) {
|
|
|
set_priority_func(p_settings.priority);
|
|
|
}
|
|
@@ -112,10 +115,6 @@ Error Thread::set_name(const String &p_name) {
|
|
|
return ERR_UNAVAILABLE;
|
|
|
}
|
|
|
|
|
|
-Thread::Thread() {
|
|
|
- caller_id = _thread_id_hash(std::this_thread::get_id());
|
|
|
-}
|
|
|
-
|
|
|
Thread::~Thread() {
|
|
|
if (id != _thread_id_hash(std::thread::id())) {
|
|
|
#ifdef DEBUG_ENABLED
|
|
@@ -125,4 +124,13 @@ Thread::~Thread() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+Thread::ID Thread::get_caller_id() {
|
|
|
+ if (likely(caller_id_cached)) {
|
|
|
+ return caller_id;
|
|
|
+ } else {
|
|
|
+ caller_id = _thread_id_hash(std::this_thread::get_id());
|
|
|
+ caller_id_cached = true;
|
|
|
+ return caller_id;
|
|
|
+ }
|
|
|
+}
|
|
|
#endif
|