# HG changeset patch # User Sebastien Jodogne # Date 1617703171 -7200 # Node ID 0a9b48d19643d6262739dee19f9486265e725030 # Parent 675f8322eb7ceefbd52fbf0704115c556eb64dfb removed mutex out of DatabaseManager diff -r 675f8322eb7c -r 0a9b48d19643 Framework/Common/DatabaseManager.cpp --- a/Framework/Common/DatabaseManager.cpp Tue Apr 06 11:17:00 2021 +0200 +++ b/Framework/Common/DatabaseManager.cpp Tue Apr 06 11:59:31 2021 +0200 @@ -164,8 +164,6 @@ void DatabaseManager::StartTransaction(TransactionType type) { - boost::recursive_mutex::scoped_lock lock(mutex_); - try { if (transaction_.get() != NULL) @@ -186,8 +184,6 @@ void DatabaseManager::CommitTransaction() { - boost::recursive_mutex::scoped_lock lock(mutex_); - if (transaction_.get() == NULL) { LOG(ERROR) << "Cannot commit a non-existing transaction"; @@ -211,8 +207,6 @@ void DatabaseManager::RollbackTransaction() { - boost::recursive_mutex::scoped_lock lock(mutex_); - if (transaction_.get() == NULL) { LOG(ERROR) << "Cannot rollback a non-existing transaction"; @@ -236,7 +230,6 @@ DatabaseManager::Transaction::Transaction(DatabaseManager& manager, TransactionType type) : - lock_(manager.mutex_), manager_(manager), database_(manager.GetDatabase()), committed_(false) @@ -328,7 +321,6 @@ DatabaseManager::StatementBase::StatementBase(DatabaseManager& manager) : manager_(manager), - lock_(manager_.mutex_), transaction_(manager_.GetTransaction()) { } diff -r 675f8322eb7c -r 0a9b48d19643 Framework/Common/DatabaseManager.h --- a/Framework/Common/DatabaseManager.h Tue Apr 06 11:17:00 2021 +0200 +++ b/Framework/Common/DatabaseManager.h Tue Apr 06 11:59:31 2021 +0200 @@ -27,18 +27,21 @@ #include // For std::unique_ptr<> #include -#include #include namespace OrthancDatabases { + /** + * WARNING: In PostgreSQL releases <= 3.3 and in MySQL releases <= + * 3.0, this class was protected by a mutex. It is now assumed that + * locking must be implemented at a higher level. + **/ class DatabaseManager : public boost::noncopyable { private: typedef std::map CachedStatements; - boost::recursive_mutex mutex_; std::unique_ptr database_; std::unique_ptr transaction_; CachedStatements cachedStatements_; @@ -86,10 +89,9 @@ class Transaction : public boost::noncopyable { private: - boost::recursive_mutex::scoped_lock lock_; - DatabaseManager& manager_; - IDatabase& database_; - bool committed_; + DatabaseManager& manager_; + IDatabase& database_; + bool committed_; public: explicit Transaction(DatabaseManager& manager, @@ -114,11 +116,10 @@ class StatementBase : public boost::noncopyable { private: - DatabaseManager& manager_; - boost::recursive_mutex::scoped_lock lock_; - ITransaction& transaction_; - std::unique_ptr query_; - std::unique_ptr result_; + DatabaseManager& manager_; + ITransaction& transaction_; + std::unique_ptr query_; + std::unique_ptr result_; IResult& GetResult() const; diff -r 675f8322eb7c -r 0a9b48d19643 Framework/Plugins/StorageBackend.cpp --- a/Framework/Plugins/StorageBackend.cpp Tue Apr 06 11:17:00 2021 +0200 +++ b/Framework/Plugins/StorageBackend.cpp Tue Apr 06 11:59:31 2021 +0200 @@ -31,6 +31,7 @@ #include // For std::unique_ptr<> #include +#include #include diff -r 675f8322eb7c -r 0a9b48d19643 Framework/Plugins/StorageBackend.h --- a/Framework/Plugins/StorageBackend.h Tue Apr 06 11:17:00 2021 +0200 +++ b/Framework/Plugins/StorageBackend.h Tue Apr 06 11:59:31 2021 +0200 @@ -25,12 +25,15 @@ #include +#include + namespace OrthancDatabases { class StorageBackend : public boost::noncopyable { private: + boost::mutex mutex_; std::unique_ptr manager_; DatabaseManager& GetManager(); @@ -54,10 +57,12 @@ class Accessor : public boost::noncopyable { private: - DatabaseManager& manager_; + boost::mutex::scoped_lock lock_; + DatabaseManager& manager_; public: Accessor(StorageBackend& backend) : + lock_(backend.mutex_), manager_(backend.GetManager()) { }