Merge pull request #22 from QuasarApp/fix_freaze
All checks were successful
buildbot/DocsGenerator Build finished.
buildbot/LinuxCMakeBuilderQt6 Build finished.

Fix freaze
This commit is contained in:
Andrei Yankovich 2025-02-19 13:59:12 +01:00 committed by GitHub
commit 2e440aba9a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 33 additions and 7 deletions

View File

@ -115,7 +115,23 @@ void IBot::setParallelActiveNetworkThreads(int newParallelActiveNetworkThreads)
}
void IBot::setCurrentParallelActiveNetworkThreads(int newParallelActiveNetworkThreads) {
bool wasBusy = _currentParallelActiveNetworkThreads == _parallelActiveNetworkThreads;
static bool lastMessageWasFree = false;
_currentParallelActiveNetworkThreads = newParallelActiveNetworkThreads;
if (_currentParallelActiveNetworkThreads == _parallelActiveNetworkThreads) {
qInfo() << "All network threads are busy!";
lastMessageWasFree = false;
} else if (wasBusy) {
qInfo() << "Network threads are free! available: " << _currentParallelActiveNetworkThreads << " from " << _parallelActiveNetworkThreads;
lastMessageWasFree = false;
} else if (_currentParallelActiveNetworkThreads == 0 && !lastMessageWasFree) {
qInfo() << "All network threads are free!";
lastMessageWasFree = true;
}
}
int IBot::reqestLimitPerSecond() const {
@ -131,9 +147,11 @@ IBot::sendRequest(const QSharedPointer<iRequest> &rquest) {
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, "", responce});
{
QMutexLocker lock(&_mutex);
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, "", responce});
}
if (!_requestExecutor->isActive()) {
handleEcxecuteRequest();
@ -150,8 +168,12 @@ IBot::sendRequest(const QSharedPointer<iRequest> &rquest,
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, pathToResult, responce});
{
QMutexLocker lock(&_mutex);
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, pathToResult, responce});
}
if (!_requestExecutor->isActive()) {
handleEcxecuteRequest();
@ -184,6 +206,8 @@ void IBot::handleIncomeNewUpdate(const QSharedPointer<iUpdate> & message) {
}
void IBot::handleEcxecuteRequest() {
QMutexLocker lock(&_mutex);
if (!_requestQueue.size()) {
_requestExecutor->stop();
return;

View File

@ -305,7 +305,7 @@ signals:
/**
* @brief sigReceiveUpdate emit when but receive any updates from users.
*/
void sigReceiveUpdate(const QSharedPointer<iUpdate>& );
void sigReceiveUpdate(const QSharedPointer<qTbot::iUpdate>& );
/**
* @brief sigStopRequire just custm event for stop bot if tou use services.
@ -339,6 +339,8 @@ private:
int _currentParallelActiveNetworkThreads = 0;
int _parallelActiveNetworkThreads = 5;
QRecursiveMutex _mutex;
};

@ -1 +1 @@
Subproject commit a96691e39974196e4739fbbb16e13eab5060c0ee
Subproject commit f96d16ec9be058fc35f3966e0a8dfe7d62ad3fb1