From ef1b25529feebca84319e953a85d288b8767b11c Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 29 Jan 2015 23:10:26 +0100 Subject: [PATCH] [DEV] correct write lock --- airtio/Interface.cpp | 38 +++++++++++++++++++------------------- airtio/Interface.h | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/airtio/Interface.cpp b/airtio/Interface.cpp index 5c04778..93892aa 100644 --- a/airtio/Interface.cpp +++ b/airtio/Interface.cpp @@ -121,14 +121,14 @@ std::shared_ptr airtio::Interface::create(const std::string& airtio::Interface::~Interface() { //stop(true, true); - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); //m_node->interfaceRemove(shared_from_this()); m_process.reset(); } void airtio::Interface::setOutputCallback(size_t _chunkSize, airtalgo::needDataFunction _function) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); m_process->removeIfFirst(); std::shared_ptr algo = airtalgo::EndPointCallback::create(_function); AIRTIO_INFO("set property: " << m_map << " " << m_format << " " << m_freq); @@ -138,7 +138,7 @@ void airtio::Interface::setOutputCallback(size_t _chunkSize, airtalgo::needDataF } void airtio::Interface::setInputCallback(size_t _chunkSize, airtalgo::haveNewDataFunction _function) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); m_process->removeIfLast(); std::shared_ptr algo = airtalgo::EndPointCallback::create(_function); algo->setInputFormat(airtalgo::IOFormatInterface(m_map, m_format, m_freq)); @@ -147,7 +147,7 @@ void airtio::Interface::setInputCallback(size_t _chunkSize, airtalgo::haveNewDat } void airtio::Interface::setWriteCallback(airtalgo::needDataFunctionWrite _function) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); std::shared_ptr algo = m_process->get(0); if (algo == nullptr) { return; @@ -156,35 +156,35 @@ void airtio::Interface::setWriteCallback(airtalgo::needDataFunctionWrite _functi } void airtio::Interface::start(const std::chrono::system_clock::time_point& _time) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); AIRTIO_DEBUG("start [BEGIN]"); m_node->interfaceAdd(shared_from_this()); AIRTIO_DEBUG("start [ END ]"); } void airtio::Interface::stop(bool _fast, bool _abort) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); AIRTIO_DEBUG("stop [BEGIN]"); m_node->interfaceRemove(shared_from_this()); AIRTIO_DEBUG("stop [ END]"); } void airtio::Interface::abort() { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); AIRTIO_DEBUG("abort [BEGIN]"); // TODO :... AIRTIO_DEBUG("abort [ END ]"); } void airtio::Interface::setVolume(float _gainDB) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); AIRTIO_DEBUG("setVolume [BEGIN]"); // TODO :... AIRTIO_DEBUG("setVolume [ END ]"); } float airtio::Interface::getVolume() const { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); AIRTIO_DEBUG("getVolume [BEGIN]"); // TODO :... AIRTIO_DEBUG("getVolume [ END ]"); @@ -192,12 +192,12 @@ float airtio::Interface::getVolume() const { } std::pair airtio::Interface::getVolumeRange() const { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); return std::make_pair(-120.0f, 0.0f); } void airtio::Interface::write(const void* _value, size_t _nbChunk) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); std::shared_ptr algo = m_process->get(0); if (algo == nullptr) { return; @@ -231,37 +231,37 @@ std::vector airtio::Interface::read(size_t _nbChunk) { #endif void airtio::Interface::read(void* _value, size_t _nbChunk) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... } size_t airtio::Interface::size() const { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... return 0; } void airtio::Interface::setBufferSize(size_t _nbChunk) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... } void airtio::Interface::setBufferSize(const std::chrono::duration& _time) { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... } void airtio::Interface::clearInternalBuffer() { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... } std::chrono::system_clock::time_point airtio::Interface::getCurrentTime() const { - std::unique_lock lock(m_mutex); + std::unique_lock lock(m_mutex); // TODO :... return std::chrono::system_clock::time_point(); return std::chrono::system_clock::now(); @@ -270,11 +270,11 @@ std::chrono::system_clock::time_point airtio::Interface::getCurrentTime() const void airtio::Interface::systemNewInputData(std::chrono::system_clock::time_point _time, void* _data, size_t _nbChunk) { - std::unique_lock lock(m_mutex); + std::unique_lock lockProcess(m_mutex); m_process->push(_time, _data, _nbChunk); } void airtio::Interface::systemNeedOutputData(std::chrono::system_clock::time_point _time, void*& _data, size_t& _nbChunk, size_t _chunkSize) { - std::unique_lock lock(m_mutex); + std::unique_lock lockProcess(m_mutex); m_process->pull(_time, _data, _nbChunk);//, _chunkSize); } diff --git a/airtio/Interface.h b/airtio/Interface.h index bed99cb..125e0d1 100644 --- a/airtio/Interface.h +++ b/airtio/Interface.h @@ -28,7 +28,7 @@ namespace airtio { friend class io::Node; friend class Manager; protected: - mutable std::mutex m_mutex; + mutable std::recursive_mutex m_mutex; protected: std::shared_ptr m_node; float m_freq;