Mercurial > hg > orthanc-databases
diff Framework/PostgreSQL/PostgreSQLDatabase.h @ 134:cc3dc759c989
Added an advisory lock to avoid race conditions during database setup
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 08 May 2019 20:21:13 +0200 |
parents | 714c5d2bee76 |
children | 4cd7e45b671e |
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLDatabase.h Fri Mar 01 12:56:13 2019 +0100 +++ b/Framework/PostgreSQL/PostgreSQLDatabase.h Wed May 08 20:21:13 2019 +0200 @@ -43,6 +43,8 @@ void Close(); + bool RunAdvisoryLockStatement(const std::string& statement); + public: PostgreSQLDatabase(const PostgreSQLParameters& parameters) : parameters_(parameters), @@ -54,6 +56,10 @@ void Open(); + bool AcquireAdvisoryLock(int32_t lock); + + bool ReleaseAdvisoryLock(int32_t lock); + void AdvisoryLock(int32_t lock); void Execute(const std::string& sql); @@ -70,5 +76,18 @@ virtual IPrecompiledStatement* Compile(const Query& query); virtual ITransaction* CreateTransaction(bool isImplicit); + + class TransientAdvisoryLock + { + private: + PostgreSQLDatabase& database_; + int32_t lock_; + + public: + TransientAdvisoryLock(PostgreSQLDatabase& database, + int32_t lock); + + ~TransientAdvisoryLock(); + }; }; }