diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt index 5829320c..310e30e6 100644 --- a/src/framework/CMakeLists.txt +++ b/src/framework/CMakeLists.txt @@ -281,6 +281,10 @@ else() set(framework_LIBRARIES ${framework_LIBRARIES} ${SYSTEM_LIBRARIES}) endif() +if(FRAMEWORK_THREAD_SAFE) + set(framework_DEFINITIONS ${framework_DEFINITIONS} -DTHREAD_SAFE) +endif() + if(FRAMEWORK_GRAPHICS) set(OPENGLES "OFF" CACHE "Use OpenGL ES 1.0 or 2.0 (for mobiles devices)" STRING) if(OPENGLES STREQUAL "2.0") diff --git a/src/framework/stdext/shared_object.h b/src/framework/stdext/shared_object.h index ad47eda4..016a512c 100644 --- a/src/framework/stdext/shared_object.h +++ b/src/framework/stdext/shared_object.h @@ -28,12 +28,16 @@ #include #include +#ifdef THREAD_SAFE +#include +#endif + namespace stdext { template class shared_object_ptr; -typedef unsigned int refcount_t; +typedef unsigned long refcount_t; class shared_object { @@ -49,7 +53,11 @@ public: template stdext::shared_object_ptr const_self_cast() { return stdext::shared_object_ptr(const_cast(this)); } private: +#ifdef THREAD_SAFE + std::atomic m_refs; +#else refcount_t m_refs; +#endif }; template