As done for WIN32 already.
Gbp-Pq: Name 0018-Don-t-allocate-m_errorBuffer-on-TLS.patch
protected:
static const int ms_bufferSize = 1024;
-#if XN_PLATFORM == XN_PLATFORM_WIN32
struct SingleBuffer
{
SingleBuffer() : m_currentEnd(0)
xnl::Hash<XN_THREAD_ID, SingleBuffer*> m_buffers;
xnl::CriticalSection m_bufferLock;
-#else
- typedef ErrorLogger SingleBuffer;
- static XN_THREAD_STATIC char m_errorBuffer[ms_bufferSize];
- static XN_THREAD_STATIC int m_currentEnd;
-#endif
SingleBuffer* getBuffer();
private:
ErrorLogger();
#include <sys/time.h>
#include <sys/resource.h>
#include <XnLog.h>
+#include <signal.h>
//---------------------------------------------------------------------------
// Code
return (XN_STATUS_OK);
}
+XN_C_API XnBool xnOSDoesThreadExistByID(XN_THREAD_ID threadId)
+{
+ return pthread_kill(threadId, 0) != ESRCH;
+}
namespace xnl
{
-#if XN_PLATFORM != XN_PLATFORM_WIN32
- XN_THREAD_STATIC char ErrorLogger::m_errorBuffer[ms_bufferSize] = "";
- XN_THREAD_STATIC int ErrorLogger::m_currentEnd = 0;
-#endif
-
ErrorLogger& ErrorLogger::GetInstance()
{
static ErrorLogger el;
ErrorLogger::~ErrorLogger()
{
-#if XN_PLATFORM == XN_PLATFORM_WIN32
while (!m_buffers.IsEmpty())
{
SingleBuffer* pBuffer = m_buffers.Begin()->Value();
XN_DELETE(pBuffer);
m_buffers.Remove(m_buffers.Begin());
}
-#endif
}
-#if XN_PLATFORM == XN_PLATFORM_WIN32
ErrorLogger::SingleBuffer* ErrorLogger::getBuffer()
{
m_bufferLock.Lock();
m_bufferLock.Unlock();
return pNewBuffer;
}
-#else
- ErrorLogger::SingleBuffer* ErrorLogger::getBuffer()
- {
- return this;
- }
-#endif
}