4
1
mirror of https://github.com/QuasarApp/Heart.git synced 2025-05-12 09:29:41 +00:00

added workers mutex

This commit is contained in:
Andrei Yankovich 2021-11-19 11:46:20 +03:00
parent 3cbbb62562
commit a886a17159
2 changed files with 16 additions and 1 deletions

@ -136,10 +136,14 @@ void AbstractNode::stop() {
}
_connectionsMutex.unlock();
_workersMutex.lock();
for (auto it: qAsConst(_workers)) {
if (!it->isFinished())
if (!it->isFinished()) {
it->cancel();
it->waitForFinished();
}
}
_workersMutex.unlock();
deinitThreadPool();
}
@ -1015,7 +1019,10 @@ void AbstractNode::handleWorkerStoped() {
if (senderObject) {
_workersMutex.lock();
_workers.remove(senderObject);
_workersMutex.unlock();
delete senderObject;
}
}
@ -1041,7 +1048,11 @@ void AbstractNode::handleBeginWork(QSharedPointer<QH::AbstractTask> work) {
if (_threadPool) {
auto worker = new QFutureWatcher <bool>();
worker->setFuture(QtConcurrent::run(_threadPool, executeObject));
_workersMutex.lock();
_workers.insert(worker);
_workersMutex.unlock();
connect(worker, &QFutureWatcher<bool>::finished,
this, &AbstractNode::handleWorkerStoped);
@ -1153,7 +1164,10 @@ void AbstractNode::newWork(const Package &pkg, AbstractNodeInfo *sender,
if (_threadPool) {
auto worker = new QFutureWatcher <bool>();
worker->setFuture(QtConcurrent::run(_threadPool, executeObject));
_workersMutex.lock();
_workers.insert(worker);
_workersMutex.unlock();
connect(worker, &QFutureWatcher<bool>::finished,
this, &AbstractNode::handleWorkerStoped);

@ -717,6 +717,7 @@ private:
mutable QMutex _connectionsMutex;
mutable QMutex _confirmNodeMutex;
mutable QMutex _threadPoolMutex;
mutable QMutex _workersMutex;
QThreadPool *_threadPool = nullptr;
QHash<unsigned short, std::function<PKG::AbstractData*()>> _registeredTypes;