diff options
author | Sven Gothel <[email protected]> | 2020-05-28 19:10:28 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2020-05-28 19:10:28 +0200 |
commit | 93c70956beddc007ba615b850401eb16cc9683dd (patch) | |
tree | 9fee37629c9130d42037870db767b9eae3a19b4f /api | |
parent | fafc8db2ed2f2975148665e7224412b72ac03df2 (diff) |
Use atomic as a memory barrier (data race), volatile is not suitable for multithreading.
Diffstat (limited to 'api')
-rw-r--r-- | api/direct_bt/DBTAdapter.hpp | 4 | ||||
-rw-r--r-- | api/direct_bt/DBTManager.hpp | 4 | ||||
-rw-r--r-- | api/direct_bt/LFRingbuffer.hpp | 10 |
3 files changed, 9 insertions, 9 deletions
diff --git a/api/direct_bt/DBTAdapter.hpp b/api/direct_bt/DBTAdapter.hpp index 14badc12..0a9f6c87 100644 --- a/api/direct_bt/DBTAdapter.hpp +++ b/api/direct_bt/DBTAdapter.hpp @@ -160,7 +160,7 @@ namespace direct_bt { std::recursive_mutex mtx_discoveredDevices; std::recursive_mutex mtx_sharedDevices; std::recursive_mutex mtx_statusListenerList; - volatile bool keepDiscoveringAlive = false; + std::atomic<bool> keepDiscoveringAlive; // = false; bool validateDevInfo(); @@ -196,7 +196,7 @@ namespace direct_bt { void startDiscoveryBackground(); - void sendDeviceUpdated(std::shared_ptr<DBTDevice> device, uint64_t timestamp, EIRDataType updateMask); + void sendDeviceUpdated(std::string cause, std::shared_ptr<DBTDevice> device, uint64_t timestamp, EIRDataType updateMask); public: diff --git a/api/direct_bt/DBTManager.hpp b/api/direct_bt/DBTManager.hpp index 76642c78..51c6d612 100644 --- a/api/direct_bt/DBTManager.hpp +++ b/api/direct_bt/DBTManager.hpp @@ -118,8 +118,8 @@ namespace direct_bt { LFRingbuffer<std::shared_ptr<MgmtEvent>, nullptr> mgmtEventRing; std::thread mgmtReaderThread; - volatile bool mgmtReaderRunning; - volatile bool mgmtReaderShallStop; + std::atomic<bool> mgmtReaderRunning; + std::atomic<bool> mgmtReaderShallStop; /** One MgmtAdapterEventCallbackList per event type, allowing multiple callbacks to be invoked for each event */ std::array<MgmtAdapterEventCallbackList, static_cast<uint16_t>(MgmtEvent::Opcode::MGMT_EVENT_TYPE_COUNT)> mgmtAdapterEventCallbackLists; diff --git a/api/direct_bt/LFRingbuffer.hpp b/api/direct_bt/LFRingbuffer.hpp index 1010b540..14447664 100644 --- a/api/direct_bt/LFRingbuffer.hpp +++ b/api/direct_bt/LFRingbuffer.hpp @@ -85,11 +85,11 @@ template <typename T, std::nullptr_t nullelem> class LFRingbuffer : public Ringb std::condition_variable cvRead; std::condition_variable cvWrite; - /* final */ int volatile capacityPlusOne; // not final due to grow - /* final */ T * volatile array; // not final due to grow - int volatile readPos; - int volatile writePos; - std::atomic_int size; + /* final */ int capacityPlusOne; // not final due to grow + /* final */ T * array; // not final due to grow + std::atomic<int> readPos; + std::atomic<int> writePos; + std::atomic<int> size; T * newArray(const int count) { return new T[count]; |