diff --git a/code/Common/DefaultLogger.cpp b/code/Common/DefaultLogger.cpp index 86a0896b2..744e0ba79 100644 --- a/code/Common/DefaultLogger.cpp +++ b/code/Common/DefaultLogger.cpp @@ -318,9 +318,13 @@ bool DefaultLogger::attachStream(LogStream *pStream, unsigned int severity) { } if (0 == severity) { - severity = Logger::Info | Logger::Err | Logger::Warn | Logger::Debugging; + severity = SeverityAll; } +#ifndef ASSIMP_BUILD_SINGLETHREADED + std::lock_guard lock(m_arrayMutex); +#endif + for (StreamIt it = m_StreamArray.begin(); it != m_StreamArray.end(); ++it) { @@ -346,6 +350,10 @@ bool DefaultLogger::detachStream(LogStream *pStream, unsigned int severity) { severity = SeverityAll; } +#ifndef ASSIMP_BUILD_SINGLETHREADED + std::lock_guard lock(m_arrayMutex); +#endif + bool res(false); for (StreamIt it = m_StreamArray.begin(); it != m_StreamArray.end(); ++it) { if ((*it)->m_pStream == pStream) { @@ -385,6 +393,10 @@ DefaultLogger::~DefaultLogger() { void DefaultLogger::WriteToStreams(const char *message, ErrorSeverity ErrorSev) { ai_assert(nullptr != message); +#ifndef ASSIMP_BUILD_SINGLETHREADED + std::lock_guard lock(m_arrayMutex); +#endif + // Check whether this is a repeated message auto thisLen = ::strlen(message); if (thisLen == lastLen - 1 && !::strncmp(message, lastMsg, lastLen - 1)) { diff --git a/include/assimp/DefaultLogger.hpp b/include/assimp/DefaultLogger.hpp index bffaa7c09..d3e11e6a7 100644 --- a/include/assimp/DefaultLogger.hpp +++ b/include/assimp/DefaultLogger.hpp @@ -56,6 +56,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "NullLogger.hpp" #include +#ifndef ASSIMP_BUILD_SINGLETHREADED +#include +#include +#endif + namespace Assimp { // ------------------------------------------------------------------------------------ class IOStream; @@ -184,6 +189,10 @@ private: //! Attached streams StreamArray m_StreamArray; +#ifndef ASSIMP_BUILD_SINGLETHREADED + std::mutex m_arrayMutex; +#endif + bool noRepeatMsg; char lastMsg[MAX_LOG_MESSAGE_LENGTH * 2]; size_t lastLen;