std::remove_if

This commit is contained in:
Xuan Son Nguyen 2025-01-22 12:57:00 +01:00
parent 08296ec74d
commit b9e517106f

View file

@ -1551,18 +1551,11 @@ struct server_queue {
private: private:
void cleanup_pending_task(int id_task) { void cleanup_pending_task(int id_task) {
// no need lock because this is called exclusively by post() // no need lock because this is called exclusively by post()
for (size_t i = 0; i < queue_tasks.size(); i++) { auto rm_func = [id_task](const server_task & task) {
if (queue_tasks[i].id == id_task) { return task.id_target == id_task;
queue_tasks.erase(queue_tasks.begin() + i); };
break; std::remove_if(queue_tasks.begin(), queue_tasks.end(), rm_func);
} std::remove_if(queue_tasks_deferred.begin(), queue_tasks_deferred.end(), rm_func);
}
for (size_t i = 0; i < queue_tasks_deferred.size(); i++) {
if (queue_tasks_deferred[i].id == id_task) {
queue_tasks_deferred.erase(queue_tasks_deferred.begin() + i);
break;
}
}
} }
}; };
@ -1600,12 +1593,13 @@ struct server_response {
std::unique_lock<std::mutex> lock(mutex_results); std::unique_lock<std::mutex> lock(mutex_results);
waiting_task_ids.erase(id_task); waiting_task_ids.erase(id_task);
// make sure to clean up all pending results // make sure to clean up all pending results
for (size_t i = 0; i < queue_results.size(); i++) { std::remove_if(
if (queue_results[i]->id == id_task) { queue_results.begin(),
queue_results.erase(queue_results.begin() + i); queue_results.end(),
i--; [id_task](const server_task_result_ptr & res) {
} return res->id == id_task;
} }
);
} }
void remove_waiting_task_ids(const std::unordered_set<int> & id_tasks) { void remove_waiting_task_ids(const std::unordered_set<int> & id_tasks) {