From 9917b9ec908705945656facfe70b01b3c1bd3c6d 2017-09-14 07:58:08 From: Alexandre Leroux Date: 2017-09-14 07:58:08 Subject: [PATCH] commit --- diff --git a/core/src/Variable/VariableAcquisitionWorker.cpp b/core/src/Variable/VariableAcquisitionWorker.cpp index 0db4bbd..c45828e 100644 --- a/core/src/Variable/VariableAcquisitionWorker.cpp +++ b/core/src/Variable/VariableAcquisitionWorker.cpp @@ -35,10 +35,25 @@ struct VariableAcquisitionWorker::VariableAcquisitionWorkerPrivate { void lockWrite() { m_Lock.lockForWrite(); } void unlock() { m_Lock.unlock(); } - void eraseAcquisition(AcquisitionId id) + void cancelAcquisition(AcquisitionId id) { auto it = m_Acquisitions.find(id); if (it != m_Acquisitions.end()) { + const auto &request = it->second.m_Request; + + QtConcurrent::run([ provider = request.m_Provider, acqIdentifier = id ]() { + provider->requestDataAborting(acqIdentifier); + }); + + eraseAcquisition(it); + } + } + + /// Removes from acquisitions and its indexes the acquisition represented by the iterator passed + /// as a parameter + void eraseAcquisition(std::map::iterator it) + { + if (it != m_Acquisitions.end()) { // Removes from index m_AcquisitionsIndex.erase(it->second.m_Variable); @@ -47,6 +62,10 @@ struct VariableAcquisitionWorker::VariableAcquisitionWorkerPrivate { } } + /// Removes from acquisitions and its indexes the acquisition represented by the identifier + /// passed as a parameter + void eraseAcquisition(AcquisitionId id) { eraseAcquisition(m_Acquisitions.find(id)); } + std::map::iterator insertAcquisition(Acquisition acquisition) { auto variable = acquisition.m_Variable; @@ -85,7 +104,16 @@ VariableAcquisitionWorker::~VariableAcquisitionWorker() void VariableAcquisitionWorker::cancelVariableRequest(std::shared_ptr variable) { - /// @todo ALX + impl->lockWrite(); + + // Gets the current acquisition for the variable (if it exists) and cancels the request + // associated + auto it = impl->m_AcquisitionsIndex.find(variable); + if (it != impl->m_AcquisitionsIndex.end()) { + impl->cancelAcquisition(it->second->m_Id); + } + + impl->unlock(); } void VariableAcquisitionWorker::pushVariableRequest(std::shared_ptr variable, @@ -93,18 +121,11 @@ void VariableAcquisitionWorker::pushVariableRequest(std::shared_ptr va { impl->lockWrite(); - // Checks if there is a current request for variable + // Checks if there is a current request for variable and cancels it auto oldAcquisitionIt = impl->m_AcquisitionsIndex.find(variable); if (oldAcquisitionIt != impl->m_AcquisitionsIndex.cend()) { auto &oldAcquisition = *oldAcquisitionIt->second; - /// @todo ALX - // QtConcurrent::run( - // [ provider = request->m_Provider, acqIdentifier = request->m_AcqIdentifier ]() - // { - // provider->requestDataAborting(acqIdentifier); - // }); - - impl->eraseAcquisition(oldAcquisition.m_Id); + impl->cancelAcquisition(oldAcquisition.m_Id); } // Sets request for variable diff --git a/core/src/Variable/VariableSynchronizer.cpp b/core/src/Variable/VariableSynchronizer.cpp index 442c358..d96001b 100644 --- a/core/src/Variable/VariableSynchronizer.cpp +++ b/core/src/Variable/VariableSynchronizer.cpp @@ -33,7 +33,7 @@ void VariableSynchronizer::addGroup(GroupId groupId) noexcept return; } - impl->m_Groups.insert(std::make_pair(groupId, Group{})); + impl->m_Groups.insert(std::make_pair(groupId, Group{groupId})); } void VariableSynchronizer::addVariable(std::shared_ptr variable, GroupId groupId) noexcept