Remove use of boost thread local storage from debug 88/35588/1
authorAdeel Kazmi <adeel.kazmi@samsung.com>
Wed, 18 Feb 2015 15:37:45 +0000 (15:37 +0000)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Wed, 18 Feb 2015 15:37:45 +0000 (15:37 +0000)
Change-Id: I68cde616b373717346d79de130af1f2f1c2ba762

build/tizen/dali-core/Makefile.am
dali/integration-api/debug.cpp

index f7a73e3..2550e5e 100644 (file)
@@ -72,7 +72,8 @@ libdali_core_la_CXXFLAGS = -DDALI_COMPILATION \
                            $(DALI_CFLAGS)
 
 libdali_core_la_LIBADD = $(DALI_LDFLAGS) \
-                         -lboost_thread
+                         -lboost_thread \
+                         -lboost_system
 
 # Create an empty shaderbin dir
 install-data-local:
index 9a081ce..fa0e9c3 100644 (file)
 #include <sstream>
 #include <iomanip>
 
-#ifndef EMSCRIPTEN
-# include <boost/thread/tss.hpp>
-#endif
-
 // INTERNAL INCLUDES
 #include <dali/public-api/common/constants.h>
 #include <dali/public-api/math/matrix3.h>
@@ -85,28 +81,7 @@ namespace Integration
 namespace Log
 {
 
-typedef LogFunction* LogFunctionPtr; ///< LogFunction pointer
-
-/**
- * This stores a pointer to a log function in thread local storage.
- * The data has to be allocated from the heap because
- * it will automatically be deleted when the thread terminates
- */
-struct ThreadLocalLogging
-{
-  ThreadLocalLogging(LogFunction func)
-  :function(func)
-  {
-  }
-
-  LogFunction function;
-};
-
-#ifndef EMSCRIPTEN // single threaded
-boost::thread_specific_ptr<ThreadLocalLogging> threadLocal;
-#else
-std::auto_ptr<ThreadLocalLogging> threadLocal;
-#endif
+__thread LogFunction gthreadLocalLogFunction = NULL;
 
 /* Forward declarations */
 std::string FormatToString(const char *format, ...);
@@ -114,14 +89,7 @@ std::string ArgListToString(const char *format, va_list args);
 
 void LogMessage(DebugPriority priority, const char* format, ...)
 {
-  ThreadLocalLogging* threadLogging = threadLocal.get();
-  // see if there is a log function for this thread
-  if (!threadLogging)
-  {
-    return;
-  }
-  const LogFunction& logfunction = threadLogging->function;
-  if (!logfunction)
+  if ( !gthreadLocalLogFunction )
   {
     return;
   }
@@ -131,7 +99,7 @@ void LogMessage(DebugPriority priority, const char* format, ...)
   std::string message = ArgListToString(format, arg);
   va_end(arg);
 
-  logfunction(priority,message);
+  gthreadLocalLogFunction(priority,message);
 }
 
 void InstallLogFunction(const LogFunction& logFunction)
@@ -139,14 +107,12 @@ void InstallLogFunction(const LogFunction& logFunction)
   // TLS stores a pointer to an object.
   // It needs to be allocated on the heap, because TLS will destroy it when the thread exits.
 
-  ThreadLocalLogging* logStruct = new ThreadLocalLogging(logFunction);
-
-  threadLocal.reset(logStruct);
+  gthreadLocalLogFunction = logFunction;
 }
 
 void UninstallLogFunction()
 {
-  threadLocal.reset();
+  gthreadLocalLogFunction = NULL;
 }
 
 #ifdef DEBUG_ENABLED