diff --git a/src/lib/component/controller/LogController.cpp b/src/lib/component/controller/LogController.cpp index d9376441..a7c71704 100644 --- a/src/lib/component/controller/LogController.cpp +++ b/src/lib/component/controller/LogController.cpp @@ -31,6 +31,7 @@ LogView* LogController::getView() const void LogController::clear() { + std::lock_guard lock(m_logsMutex); m_logs.clear(); getView()->clear(); } @@ -87,7 +88,7 @@ void LogController::handleMessage(MessageClearLogView* message) void LogController::addLog(Logger::LogLevel type, const LogMessage& message) { - + std::lock_guard lock(m_logsMutex); m_logs.push_back( Log( type, @@ -101,7 +102,7 @@ void LogController::addLog(Logger::LogLevel type, const LogMessage& message) m_waiting = true; std::thread([&]() { - std::this_thread::sleep_for( std::chrono::seconds(1) ); + std::this_thread::sleep_for(std::chrono::milliseconds(200)); syncLogs(); m_waiting = false; } @@ -111,13 +112,16 @@ void LogController::addLog(Logger::LogLevel type, const LogMessage& message) void LogController::syncLogs() { + std::lock_guard lock(m_logsMutex); + int logCount = m_logs.size(); if (logCount > getView()->LogLimit) { - m_logs.erase(m_logs.begin(),m_logs.begin() + logCount - LogView::LogLimit); + m_logs.erase(m_logs.begin(), m_logs.begin() + logCount - LogView::LogLimit); } + std::vector logs; - for( Log log : m_logs ) + for (Log log : m_logs) { if (log.type & m_logLevel) { diff --git a/src/lib/component/controller/LogController.h b/src/lib/component/controller/LogController.h index a4acce2f..58bc35e1 100644 --- a/src/lib/component/controller/LogController.h +++ b/src/lib/component/controller/LogController.h @@ -1,6 +1,8 @@ #ifndef LOG_CONTROLLER_H #define LOG_CONTROLLER_H +#include + #include "component/controller/Controller.h" #include "component/view/LogView.h" @@ -38,12 +40,15 @@ private: virtual void handleMessage(MessageClearLogView* message); virtual void handleMessage(MessageLogFilterChanged* message); - std::vector m_logs; void addLog(Logger::LogLevel type, const LogMessage& message); void syncLogs(); - bool m_waiting; + + std::vector m_logs; Logger::LogLevelMask m_logLevel; + + std::mutex m_logsMutex; + bool m_waiting; }; #endif // LOG_CONTROLLER_H diff --git a/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp b/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp index f4ffeea3..e13932eb 100644 --- a/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp +++ b/src/lib_cxx/data/parser/cxx/name_resolver/CxxSpecifierNameResolver.cpp @@ -23,8 +23,13 @@ CxxSpecifierNameResolver::~CxxSpecifierNameResolver() std::shared_ptr CxxSpecifierNameResolver::getName(const clang::NestedNameSpecifier* nestedNameSpecifier) { - clang::NestedNameSpecifier::SpecifierKind nnsKind = nestedNameSpecifier->getKind(); std::shared_ptr name; + if (!nestedNameSpecifier) + { + return name; + } + + clang::NestedNameSpecifier::SpecifierKind nnsKind = nestedNameSpecifier->getKind(); switch (nnsKind) { case clang::NestedNameSpecifier::Identifier: