Skip to content

Commit

Permalink
Merge pull request #6669 from lioncash/thread-local
Browse files Browse the repository at this point in the history
Core: Use thread_local directly
  • Loading branch information
leoetlino committed Apr 20, 2018
2 parents e169329 + e6405f7 commit f934042
Showing 1 changed file with 1 addition and 38 deletions.
39 changes: 1 addition & 38 deletions Source/Core/Core/Core.cpp
Expand Up @@ -75,13 +75,6 @@
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VideoBackendBase.h"

// Android and OSX haven't implemented the keyword yet.
#if defined __ANDROID__ || defined __APPLE__
#include <pthread.h>
#else // Everything besides OSX and Android
#define ThreadLocalStorage thread_local
#endif

namespace Core
{
static bool s_wants_determinism;
Expand Down Expand Up @@ -112,16 +105,7 @@ struct HostJob
static std::mutex s_host_jobs_lock;
static std::queue<HostJob> s_host_jobs_queue;

#ifdef ThreadLocalStorage
static ThreadLocalStorage bool tls_is_cpu_thread = false;
#else
static pthread_key_t s_tls_is_cpu_key;
static pthread_once_t s_cpu_key_is_init = PTHREAD_ONCE_INIT;
static void InitIsCPUKey()
{
pthread_key_create(&s_tls_is_cpu_key, nullptr);
}
#endif
static thread_local bool tls_is_cpu_thread = false;

static void EmuThread(std::unique_ptr<BootParameters> boot);

Expand Down Expand Up @@ -183,14 +167,7 @@ bool IsRunningInCurrentThread()

bool IsCPUThread()
{
#ifdef ThreadLocalStorage
return tls_is_cpu_thread;
#else
// Use pthread implementation for Android and Mac
// Make sure that s_tls_is_cpu_key is initialized
pthread_once(&s_cpu_key_is_init, InitIsCPUKey);
return pthread_getspecific(s_tls_is_cpu_key);
#endif
}

bool IsGPUThread()
Expand Down Expand Up @@ -297,26 +274,12 @@ void Stop() // - Hammertime!

void DeclareAsCPUThread()
{
#ifdef ThreadLocalStorage
tls_is_cpu_thread = true;
#else
// Use pthread implementation for Android and Mac
// Make sure that s_tls_is_cpu_key is initialized
pthread_once(&s_cpu_key_is_init, InitIsCPUKey);
pthread_setspecific(s_tls_is_cpu_key, (void*)true);
#endif
}

void UndeclareAsCPUThread()
{
#ifdef ThreadLocalStorage
tls_is_cpu_thread = false;
#else
// Use pthread implementation for Android and Mac
// Make sure that s_tls_is_cpu_key is initialized
pthread_once(&s_cpu_key_is_init, InitIsCPUKey);
pthread_setspecific(s_tls_is_cpu_key, (void*)false);
#endif
}

// For the CPU Thread only.
Expand Down

0 comments on commit f934042

Please sign in to comment.