@@ -254,6 +254,8 @@ std::string SuppressionList::addSuppressionLine(const std::string &line)
254254
255255std::string SuppressionList::addSuppression (SuppressionList::Suppression suppression)
256256{
257+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
258+
257259 // Check if suppression is already in list
258260 auto foundSuppression = std::find_if (mSuppressions .begin (), mSuppressions .end (),
259261 std::bind (&Suppression::isSameParameters, &suppression, std::placeholders::_1));
@@ -297,6 +299,8 @@ std::string SuppressionList::addSuppressions(std::list<Suppression> suppressions
297299// cppcheck-suppress unusedFunction
298300bool SuppressionList::updateSuppressionState (const SuppressionList::Suppression& suppression)
299301{
302+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
303+
300304 // Check if suppression is already in list
301305 auto foundSuppression = std::find_if (mSuppressions .begin (), mSuppressions .end (),
302306 std::bind (&Suppression::isSameParameters, &suppression, std::placeholders::_1));
@@ -431,6 +435,8 @@ std::string SuppressionList::Suppression::getText() const
431435
432436bool SuppressionList::isSuppressed (const SuppressionList::ErrorMessage &errmsg, bool global)
433437{
438+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
439+
434440 const bool unmatchedSuppression (errmsg.errorId == " unmatchedSuppression" );
435441 bool returnValue = false ;
436442 for (Suppression &s : mSuppressions ) {
@@ -446,6 +452,8 @@ bool SuppressionList::isSuppressed(const SuppressionList::ErrorMessage &errmsg,
446452
447453bool SuppressionList::isSuppressedExplicitly (const SuppressionList::ErrorMessage &errmsg, bool global)
448454{
455+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
456+
449457 for (Suppression &s : mSuppressions ) {
450458 if (!global && !s.isLocal ())
451459 continue ;
@@ -459,13 +467,19 @@ bool SuppressionList::isSuppressedExplicitly(const SuppressionList::ErrorMessage
459467
460468bool SuppressionList::isSuppressed (const ::ErrorMessage &errmsg, const std::set<std::string>& macroNames)
461469{
462- if (mSuppressions .empty ())
463- return false ;
470+ {
471+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
472+
473+ if (mSuppressions .empty ())
474+ return false ;
475+ }
464476 return isSuppressed (SuppressionList::ErrorMessage::fromErrorMessage (errmsg, macroNames));
465477}
466478
467479void SuppressionList::dump (std::ostream & out) const
468480{
481+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
482+
469483 out << " <suppressions>" << std::endl;
470484 for (const Suppression &suppression : mSuppressions ) {
471485 out << " <suppression" ;
@@ -499,6 +513,8 @@ void SuppressionList::dump(std::ostream & out) const
499513
500514std::list<SuppressionList::Suppression> SuppressionList::getUnmatchedLocalSuppressions (const FileWithDetails &file, const bool unusedFunctionChecking) const
501515{
516+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
517+
502518 std::list<Suppression> result;
503519 for (const Suppression &s : mSuppressions ) {
504520 if (s.matched || ((s.lineNumber != Suppression::NO_LINE ) && !s.checked ))
@@ -520,6 +536,8 @@ std::list<SuppressionList::Suppression> SuppressionList::getUnmatchedLocalSuppre
520536
521537std::list<SuppressionList::Suppression> SuppressionList::getUnmatchedGlobalSuppressions (const bool unusedFunctionChecking) const
522538{
539+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
540+
523541 std::list<Suppression> result;
524542 for (const Suppression &s : mSuppressions ) {
525543 if (s.matched || ((s.lineNumber != Suppression::NO_LINE ) && !s.checked ))
@@ -537,12 +555,16 @@ std::list<SuppressionList::Suppression> SuppressionList::getUnmatchedGlobalSuppr
537555 return result;
538556}
539557
540- const std::list<SuppressionList::Suppression> & SuppressionList::getSuppressions () const
558+ std::list<SuppressionList::Suppression> SuppressionList::getSuppressions () const
541559{
560+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
561+
542562 return mSuppressions ;
543563}
544564
545565void SuppressionList::markUnmatchedInlineSuppressionsAsChecked (const Tokenizer &tokenizer) {
566+ std::lock_guard<std::mutex> lg (mSuppressionsSync );
567+
546568 int currLineNr = -1 ;
547569 int currFileIdx = -1 ;
548570 for (const Token *tok = tokenizer.tokens (); tok; tok = tok->next ()) {
0 commit comments