diff options
| author | Pedro J. Estébanez | 2017-08-23 19:18:38 +0200 |
|---|---|---|
| committer | Pedro J. Estébanez | 2017-08-24 07:02:55 +0200 |
| commit | d806ad4a3dcf7308147e1a243092d22091560d7d (patch) | |
| tree | 1aa556f49cb1b6908902387ea122d953aa6d7d45 /drivers/unix/thread_posix.cpp | |
| parent | a560a6211868d517908f44e1ea90336b18cdb97d (diff) | |
| download | godot-d806ad4a3dcf7308147e1a243092d22091560d7d.tar.gz godot-d806ad4a3dcf7308147e1a243092d22091560d7d.tar.zst godot-d806ad4a3dcf7308147e1a243092d22091560d7d.zip | |
Diffstat (limited to 'drivers/unix/thread_posix.cpp')
| -rw-r--r-- | drivers/unix/thread_posix.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/unix/thread_posix.cpp b/drivers/unix/thread_posix.cpp index 3b895ff9c..08dae619b 100644 --- a/drivers/unix/thread_posix.cpp +++ b/drivers/unix/thread_posix.cpp @@ -36,8 +36,18 @@ #include <pthread_np.h> #endif +#include "core/safe_refcount.h" #include "os/memory.h" +static pthread_key_t _create_thread_id_key() { + pthread_key_t key; + pthread_key_create(&key, NULL); + return key; +} + +pthread_key_t ThreadPosix::thread_id_key = _create_thread_id_key(); +Thread::ID ThreadPosix::next_thread_id = 0; + Thread::ID ThreadPosix::get_id() const { return id; @@ -51,7 +61,8 @@ Thread *ThreadPosix::create_thread_posix() { void *ThreadPosix::thread_callback(void *userdata) { ThreadPosix *t = reinterpret_cast<ThreadPosix *>(userdata); - t->id = (ID)pthread_self(); + t->id = atomic_increment(&next_thread_id); + pthread_setspecific(thread_id_key, (void *)t->id); ScriptServer::thread_enter(); //scripts may need to attach a stack @@ -77,7 +88,7 @@ Thread *ThreadPosix::create_func_posix(ThreadCreateCallback p_callback, void *p_ } Thread::ID ThreadPosix::get_thread_id_func_posix() { - return (ID)pthread_self(); + return (ID)pthread_getspecific(thread_id_key); } void ThreadPosix::wait_to_finish_func_posix(Thread *p_thread) { |
