diff --git a/versioning/BRM/extentmap.cpp b/versioning/BRM/extentmap.cpp index 29cb9fcb3..bb54ee6ba 100644 --- a/versioning/BRM/extentmap.cpp +++ b/versioning/BRM/extentmap.cpp @@ -20,7 +20,7 @@ * $Id: extentmap.cpp 1936 2013-07-09 22:10:29Z dhall $ * ****************************************************************************/ - +#include #include #include #include @@ -6036,17 +6036,17 @@ void ExtentMap::confirmChangesRBTree() undoRecordsRBTree.clear(); } -const bool* ExtentMap::getEMFLLockStatus() +const std::atomic* ExtentMap::getEMFLLockStatus() { return &flLocked; } -const bool* ExtentMap::getEMLockStatus() +const std::atomic* ExtentMap::getEMLockStatus() { return &emLocked; } -const bool* ExtentMap::getEMIndexLockStatus() +const std::atomic* ExtentMap::getEMIndexLockStatus() { return &emIndexLocked; } diff --git a/versioning/BRM/extentmap.h b/versioning/BRM/extentmap.h index 5fc5d8cb9..7ab47c190 100644 --- a/versioning/BRM/extentmap.h +++ b/versioning/BRM/extentmap.h @@ -1035,9 +1035,9 @@ class ExtentMap : public Undoable EXPORT std::vector getFreeListEntries(); EXPORT void dumpTo(std::ostream& os); - EXPORT const bool* getEMLockStatus(); - EXPORT const bool* getEMFLLockStatus(); - EXPORT const bool* getEMIndexLockStatus(); + EXPORT const std::atomic* getEMLockStatus(); + EXPORT const std::atomic* getEMFLLockStatus(); + EXPORT const std::atomic* getEMIndexLockStatus(); size_t EMIndexShmemSize(); size_t EMIndexShmemFree(); @@ -1087,7 +1087,9 @@ class ExtentMap : public Undoable time_t fCacheTime; // timestamp associated with config cache int numUndoRecords; - bool flLocked, emLocked, emIndexLocked; + std::atomic flLocked{false}; + std::atomic emLocked{false}; + std::atomic emIndexLocked{false}; static boost::mutex mutex; // @bug5355 - made mutex static static boost::mutex emIndexMutex; diff --git a/versioning/BRM/rwlockmonitor.cpp b/versioning/BRM/rwlockmonitor.cpp index e117b40cd..6eecf7fe5 100644 --- a/versioning/BRM/rwlockmonitor.cpp +++ b/versioning/BRM/rwlockmonitor.cpp @@ -35,7 +35,7 @@ using namespace logging; namespace BRM { -RWLockMonitor::RWLockMonitor(const bool* d, const bool* ls, const uint32_t k) : die(d), lockStatus(ls), key(k) +RWLockMonitor::RWLockMonitor(const std::atomic* d, const std::atomic* ls, const uint32_t k) : die(d), lockStatus(ls), key(k) { ts.tv_sec = 210; // 3:30 timer ts.tv_nsec = 0; diff --git a/versioning/BRM/rwlockmonitor.h b/versioning/BRM/rwlockmonitor.h index 142a959c1..c9efa9a40 100644 --- a/versioning/BRM/rwlockmonitor.h +++ b/versioning/BRM/rwlockmonitor.h @@ -28,6 +28,7 @@ #include #include "rwlock.h" +#include #define EXPORT @@ -37,7 +38,7 @@ class RWLockMonitor { public: // d = die, ls = lock status, k = key - EXPORT RWLockMonitor(const bool* d, const bool* ls, const uint32_t k); + EXPORT RWLockMonitor(const std::atomic* d, const std::atomic* ls, const uint32_t k); EXPORT virtual ~RWLockMonitor(); @@ -49,8 +50,8 @@ class RWLockMonitor // RWLockMonitor& operator=(const RWLockMonitor&rhs); /* Some of these vars are only useful once we implement write_lock checking. */ - const bool* die; - const bool* lockStatus; + const std::atomic* die; + const std::atomic* lockStatus; uint32_t key; boost::shared_ptr lock; diff --git a/versioning/BRM/slavedbrmnode.cpp b/versioning/BRM/slavedbrmnode.cpp index 2331169a9..4316df8c0 100644 --- a/versioning/BRM/slavedbrmnode.cpp +++ b/versioning/BRM/slavedbrmnode.cpp @@ -1482,27 +1482,27 @@ int SlaveDBRMNode::dmlReleaseLBIDRanges(const vector& ranges) } } -const bool* SlaveDBRMNode::getEMFLLockStatus() +const std::atomic* SlaveDBRMNode::getEMFLLockStatus() { return em.getEMFLLockStatus(); } -const bool* SlaveDBRMNode::getEMLockStatus() +const std::atomic* SlaveDBRMNode::getEMLockStatus() { return em.getEMLockStatus(); } -const bool* SlaveDBRMNode::getEMIndexLockStatus() +const std::atomic *SlaveDBRMNode::getEMIndexLockStatus() { return em.getEMIndexLockStatus(); } -const bool* SlaveDBRMNode::getVBBMLockStatus() +const std::atomic* SlaveDBRMNode::getVBBMLockStatus() { return &locked[0]; } -const bool* SlaveDBRMNode::getVSSLockStatus() +const std::atomic* SlaveDBRMNode::getVSSLockStatus() { return &locked[1]; } diff --git a/versioning/BRM/slavedbrmnode.h b/versioning/BRM/slavedbrmnode.h index bedb6d57f..d1dee6cf5 100644 --- a/versioning/BRM/slavedbrmnode.h +++ b/versioning/BRM/slavedbrmnode.h @@ -455,11 +455,11 @@ class SlaveDBRMNode EXPORT int loadState(std::string filename) throw(); EXPORT int saveState(std::string filename) throw(); - EXPORT const bool* getEMFLLockStatus(); - EXPORT const bool* getEMLockStatus(); - EXPORT const bool* getEMIndexLockStatus(); - EXPORT const bool* getVBBMLockStatus(); - EXPORT const bool* getVSSLockStatus(); + EXPORT const std::atomic* getEMFLLockStatus(); + EXPORT const std::atomic* getEMLockStatus(); + EXPORT const std::atomic* getEMIndexLockStatus(); + EXPORT const std::atomic* getVBBMLockStatus(); + EXPORT const std::atomic* getVSSLockStatus(); private: explicit SlaveDBRMNode(const SlaveDBRMNode& brm); @@ -471,7 +471,7 @@ class SlaveDBRMNode VBBM vbbm; VSS vss; CopyLocks copylocks; - bool locked[3]; // 0 = VBBM, 1 = VSS, 2 = CopyLocks + std::atomic locked[3] {false, false, false}; // 0 = VBBM, 1 = VSS, 2 = CopyLocks }; } // namespace BRM diff --git a/versioning/BRM/slavenode.cpp b/versioning/BRM/slavenode.cpp index d1c2a73da..2e116c959 100644 --- a/versioning/BRM/slavenode.cpp +++ b/versioning/BRM/slavenode.cpp @@ -36,12 +36,13 @@ #include "crashtrace.h" #include "service.h" #include "jobstep.h" +#include using namespace BRM; using namespace std; std::unique_ptr comm; -bool die = false; +std::atomic die{false}; boost::thread_group monitorThreads; class Opt