@@ -1551,18 +1551,11 @@ struct server_queue {
15511551private:
15521552 void cleanup_pending_task (int id_task) {
15531553 // no need lock because this is called exclusively by post()
1554- for (size_t i = 0 ; i < queue_tasks.size (); i++) {
1555- if (queue_tasks[i].id == id_task) {
1556- queue_tasks.erase (queue_tasks.begin () + i);
1557- break ;
1558- }
1559- }
1560- for (size_t i = 0 ; i < queue_tasks_deferred.size (); i++) {
1561- if (queue_tasks_deferred[i].id == id_task) {
1562- queue_tasks_deferred.erase (queue_tasks_deferred.begin () + i);
1563- break ;
1564- }
1565- }
1554+ auto rm_func = [id_task](const server_task & task) {
1555+ return task.id_target == id_task;
1556+ };
1557+ std::remove_if (queue_tasks.begin (), queue_tasks.end (), rm_func);
1558+ std::remove_if (queue_tasks_deferred.begin (), queue_tasks_deferred.end (), rm_func);
15661559 }
15671560};
15681561
@@ -1600,12 +1593,13 @@ struct server_response {
16001593 std::unique_lock<std::mutex> lock (mutex_results);
16011594 waiting_task_ids.erase (id_task);
16021595 // make sure to clean up all pending results
1603- for (size_t i = 0 ; i < queue_results.size (); i++) {
1604- if (queue_results[i]->id == id_task) {
1605- queue_results.erase (queue_results.begin () + i);
1606- i--;
1596+ std::remove_if (
1597+ queue_results.begin (),
1598+ queue_results.end (),
1599+ [id_task](const server_task_result_ptr & res) {
1600+ return res->id == id_task;
16071601 }
1608- }
1602+ );
16091603 }
16101604
16111605 void remove_waiting_task_ids (const std::unordered_set<int > & id_tasks) {
0 commit comments