From 319733d30bea5723ae8c8734cd81f6db7011acba Mon Sep 17 00:00:00 2001 From: David Capello Date: Wed, 17 Jun 2020 18:10:26 -0300 Subject: [PATCH] Fix some extra issues reported by the ThreadSanitizer --- laf | 2 +- src/app/closed_docs.h | 5 +++-- src/app/crash/backup_observer.cpp | 2 ++ src/app/doc.cpp | 2 +- src/app/doc.h | 3 ++- src/app/doc_access.h | 5 +++-- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/laf b/laf index 0dd4ba1bd..85a17a563 160000 --- a/laf +++ b/laf @@ -1 +1 @@ -Subproject commit 0dd4ba1bdd910fb00d2e209d8c3b4454a09ce271 +Subproject commit 85a17a563197ab8ec14ad43a727ab10173439f83 diff --git a/src/app/closed_docs.h b/src/app/closed_docs.h index eadb2191b..ab852e466 100644 --- a/src/app/closed_docs.h +++ b/src/app/closed_docs.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2019 Igara Studio S.A. +// Copyright (C) 2019-2020 Igara Studio S.A. // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,6 +10,7 @@ #include "base/time.h" +#include #include #include #include @@ -49,7 +50,7 @@ namespace app { base::tick_t timestamp; }; - bool m_done; + std::atomic m_done; base::tick_t m_dataRecoveryPeriodMSecs; base::tick_t m_keepClosedDocAliveForMSecs; std::vector m_docs; diff --git a/src/app/crash/backup_observer.cpp b/src/app/crash/backup_observer.cpp index 3e6398ae2..dd03f5821 100644 --- a/src/app/crash/backup_observer.cpp +++ b/src/app/crash/backup_observer.cpp @@ -110,6 +110,8 @@ void BackupObserver::onRemoveDocument(Doc* doc) // then it's deleted from ClosedDocs::backgroundThread() TRACE("RECO: Adding to CLOSEDOC %p\n", doc); + + std::unique_lock lock(m_mutex); m_closedDocs.push_back(doc); } else { diff --git a/src/app/doc.cpp b/src/app/doc.cpp index 52eb2ff5a..31b4c0e94 100644 --- a/src/app/doc.cpp +++ b/src/app/doc.cpp @@ -125,7 +125,7 @@ void Doc::unlock() m_rwLock.unlock(); } -bool Doc::weakLock(base::RWLock::WeakLock* weak_lock_flag) +bool Doc::weakLock(std::atomic* weak_lock_flag) { return m_rwLock.weakLock(weak_lock_flag); } diff --git a/src/app/doc.h b/src/app/doc.h index e2cea2bfc..c5a3ea210 100644 --- a/src/app/doc.h +++ b/src/app/doc.h @@ -26,6 +26,7 @@ #include "obs/observable.h" #include "os/color_space.h" +#include #include #include @@ -79,7 +80,7 @@ namespace app { void downgradeToRead(); void unlock(); - bool weakLock(base::RWLock::WeakLock* weak_lock_flag); + bool weakLock(std::atomic* weak_lock_flag); void weakUnlock(); // Sets active/running transaction. diff --git a/src/app/doc_access.h b/src/app/doc_access.h index 730e09ef1..3e3b32176 100644 --- a/src/app/doc_access.h +++ b/src/app/doc_access.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2019 Igara Studio S.A. +// Copyright (C) 2019-2020 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -13,6 +13,7 @@ #include "app/doc.h" #include "base/exception.h" +#include #include namespace app { @@ -245,7 +246,7 @@ namespace app { WeakDocReader(const WeakDocReader&); WeakDocReader& operator=(const WeakDocReader&); - base::RWLock::WeakLock m_weak_lock; + std::atomic m_weak_lock; }; } // namespace app