Mercurial > hg > orthanc-databases
diff Framework/MySQL/MySQLDatabase.h @ 135:e26690365c25
MySQL: Added an advisory lock to avoid race conditions during database setup
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 08 May 2019 21:09:18 +0200 |
parents | 714c5d2bee76 |
children | 52b3859ee0b7 |
line wrap: on
line diff
--- a/Framework/MySQL/MySQLDatabase.h Wed May 08 20:21:13 2019 +0200 +++ b/Framework/MySQL/MySQLDatabase.h Wed May 08 21:09:18 2019 +0200 @@ -44,6 +44,8 @@ void Close(); + bool RunAdvisoryLockStatement(const std::string& statement); + public: MySQLDatabase(const MySQLParameters& parameters); @@ -70,6 +72,10 @@ bool LookupGlobalIntegerVariable(int64_t& value, const std::string& variable); + bool AcquireAdvisoryLock(int32_t lock); + + bool ReleaseAdvisoryLock(int32_t lock); + void AdvisoryLock(int32_t lock); void Execute(const std::string& sql, @@ -93,5 +99,18 @@ static void GlobalFinalization(); static bool IsValidDatabaseIdentifier(const std::string& s); + + class TransientAdvisoryLock + { + private: + MySQLDatabase& database_; + int32_t lock_; + + public: + TransientAdvisoryLock(MySQLDatabase& database, + int32_t lock); + + ~TransientAdvisoryLock(); + }; }; }