diff --git a/Minecraft.World/Entities/Entity.cpp b/Minecraft.World/Entities/Entity.cpp index 9c88a00e2..0a62c9b3e 100644 --- a/Minecraft.World/Entities/Entity.cpp +++ b/Minecraft.World/Entities/Entity.cpp @@ -24,7 +24,11 @@ int Entity::entityCounter = 2048; // 4J - changed initialiser to 2048, as we are using range 0 - 2047 as special unique smaller ids for things that need network tracked +#ifdef _WIN32 DWORD Entity::tlsIdx = TlsAlloc(); +#else +pthread_key_t Entity::tlsIdx = 0; +#endif // 4J - added getSmallId & freeSmallId methods unsigned int Entity::entityIdUsedFlags[2048/32] = {0}; @@ -47,7 +51,6 @@ int Entity::getSmallId() #ifdef _WIN32 if( ((size_t)TlsGetValue(tlsIdx) != 0 ) ) #else - pthread_key_create(&tlsIdx, nullptr); if ( ((size_t)pthread_getspecific(tlsIdx) != 0) ) #endif { @@ -151,7 +154,16 @@ void Entity::freeSmallId(int index) void Entity::useSmallIds() { - pthread_setspecific(tlsIdx,(LPVOID)1); +#ifdef _WIN32 + TlsSetValue(tlsIdx, (LPVOID)1); +#else + static bool keyCreated = false; + if (!keyCreated) { + pthread_key_create(&tlsIdx, nullptr); + keyCreated = true; + } + pthread_setspecific(tlsIdx,(void*)1); +#endif } // Things also added here to be able to manage the concept of a number of extra "wandering" entities - normally path finding entities aren't allowed to