Merge pull request #448 from gradido/login_fix_kw_20

everything I find and fix crash related in login server this week (kw 20)
This commit is contained in:
einhornimmond 2021-05-24 11:55:23 +02:00 committed by GitHub
commit 47dd4adf0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -180,31 +180,43 @@ std::vector<Poco::AutoPtr<controller::PendingTask>> PendingTasksManager::getTran
void PendingTasksManager::checkForFinishedTasks(Poco::Timer& timer)
{
static const char* function_name = "PendingTasksManager::checkForFinishedTasks";
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
try {
for (auto map_it = mPendingTasks.begin(); map_it != mPendingTasks.end(); map_it++)
{
auto list = map_it->second;
for (auto list_it = list->begin(); list_it != list->end(); list_it++)
for (auto map_it = mPendingTasks.begin(); map_it != mPendingTasks.end(); map_it++)
{
if ((*list_it)->getModel()->isGradidoTransaction()) {
auto transaction = dynamic_cast<model::gradido::Transaction*>(list_it->get());
auto json = transaction->getModel()->getResultJson();
bool removeIt = false;
if (!json.isNull()) {
auto state = json->get("state");
if (!state.isEmpty() && state.toString() == "success") {
removeIt = true;
auto list = map_it->second;
for (auto list_it = list->begin(); list_it != list->end(); list_it++)
{
if ((*list_it)->getModel()->isGradidoTransaction()) {
auto transaction = dynamic_cast<model::gradido::Transaction*>(list_it->get());
auto json = transaction->getModel()->getResultJson();
bool removeIt = false;
if (!json.isNull()) {
auto state = json->get("state");
if (!state.isEmpty() && state.toString() == "success") {
removeIt = true;
}
}
if (removeIt) {
transaction->deleteFromDB();
list_it = list->erase(list_it);
if (!list->size() || list_it == list->end()) break;
}
}
if (removeIt) {
transaction->deleteFromDB();
list_it = list->erase(list_it);
if (!list->size()) break;
}
}
}
}
catch (Poco::Exception& ex) {
NotificationList errors;
errors.addError(new ParamError(function_name, "poco exception", ex.displayText()));
errors.sendErrorsAsEmail();
} catch(std::exception& ex) {
NotificationList errors;
errors.addError(new ParamError(function_name, "std::exception", ex.what()));
errors.sendErrorsAsEmail();
}
}
Poco::AutoPtr<controller::PendingTask> PendingTasksManager::getPendingTask(int pendingTaskId)