Don't allocate m_errorBuffer on TLS
authorJochen Sprickerhof <git@jochen.sprickerhof.de>
Sun, 1 Dec 2019 11:07:52 +0000 (12:07 +0100)
committerJochen Sprickerhof <jspricke@debian.org>
Thu, 3 Dec 2020 18:23:37 +0000 (18:23 +0000)
As done for WIN32 already.

Gbp-Pq: Name 0018-Don-t-allocate-m_errorBuffer-on-TLS.patch

ThirdParty/PSCommon/XnLib/Include/XnErrorLogger.h
ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxThreads.cpp
ThirdParty/PSCommon/XnLib/Source/XnErrorLogger.cpp

index d0bca08dea16a6411c7b95187668fb21d0c03904..dbba5bdf3ee781da7e93b3061238b573407e8c1e 100644 (file)
@@ -44,7 +44,6 @@ public:
 protected:
        static const int ms_bufferSize = 1024;
 
-#if XN_PLATFORM == XN_PLATFORM_WIN32
        struct SingleBuffer
        {
                SingleBuffer() : m_currentEnd(0)
@@ -57,11 +56,6 @@ protected:
 
        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();
index f4d2e8ba7739e8b3ae388764d46a06cd9e1150a7..752543b3eb196438c8e392b4ac609eae3abaa114 100644 (file)
@@ -26,6 +26,7 @@
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <XnLog.h>
+#include <signal.h>
 
 //---------------------------------------------------------------------------
 // Code
@@ -202,3 +203,7 @@ XN_C_API XnStatus xnOSGetCurrentThreadID(XN_THREAD_ID* pThreadID)
        return (XN_STATUS_OK);
 }
 
+XN_C_API XnBool xnOSDoesThreadExistByID(XN_THREAD_ID threadId)
+{
+  return pthread_kill(threadId, 0) != ESRCH;
+}
index 81c6b22853325230e90cbf41bc434c725bab5c1a..0badca49b0def85cee0166967b2025712adb2993 100644 (file)
 
 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;
@@ -88,17 +83,14 @@ namespace xnl
 
        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();
@@ -139,10 +131,4 @@ namespace xnl
                m_bufferLock.Unlock();
                return pNewBuffer;
        }
-#else
-       ErrorLogger::SingleBuffer* ErrorLogger::getBuffer()
-       {
-               return this;
-       }
-#endif
 }