@@ -1552,11 +1552,11 @@ struct server_queue {
15521552 std::condition_variable condition_tasks;
15531553
15541554 // callback functions
1555- std::function<void (server_task&)> callback_new_task;
1555+ std::function<void (server_task&& )> callback_new_task;
15561556 std::function<void (void )> callback_update_slots;
15571557
15581558 // Add a new task to the end of the queue
1559- int post (server_task & task, bool front = false ) {
1559+ int post (server_task && task, bool front = false ) {
15601560 std::unique_lock<std::mutex> lock (mutex_tasks);
15611561 GGML_ASSERT (task.id != -1 );
15621562 // if this is cancel task make sure to clean up pending tasks
@@ -1565,16 +1565,16 @@ struct server_queue {
15651565 }
15661566 QUE_DBG (" new task, id = %d, front = %d\n " , task.id , front);
15671567 if (front) {
1568- queue_tasks.push_front (std::move ( task) );
1568+ queue_tasks.push_front (task);
15691569 } else {
1570- queue_tasks.push_back (std::move ( task) );
1570+ queue_tasks.push_back (task);
15711571 }
15721572 condition_tasks.notify_one ();
15731573 return task.id ;
15741574 }
15751575
15761576 // multi-task version of post()
1577- int post (std::vector<server_task> & tasks, bool front = false ) {
1577+ int post (std::vector<server_task> && tasks, bool front = false ) {
15781578 std::unique_lock<std::mutex> lock (mutex_tasks);
15791579 for (auto & task : tasks) {
15801580 if (task.id == -1 ) {
@@ -1596,10 +1596,10 @@ struct server_queue {
15961596 }
15971597
15981598 // Add a new task, but defer until one slot is available
1599- void defer (server_task & task) {
1599+ void defer (server_task && task) {
16001600 std::unique_lock<std::mutex> lock (mutex_tasks);
16011601 QUE_DBG (" defer task, id = %d\n " , task.id );
1602- queue_tasks_deferred.push_back (std::move ( task) );
1602+ queue_tasks_deferred.push_back (task);
16031603 condition_tasks.notify_one ();
16041604 }
16051605
@@ -1611,7 +1611,7 @@ struct server_queue {
16111611 }
16121612
16131613 // Register function to process a new task
1614- void on_new_task (std::function<void (server_task&)> callback) {
1614+ void on_new_task (std::function<void (server_task&& )> callback) {
16151615 callback_new_task = std::move (callback);
16161616 }
16171617
@@ -1665,7 +1665,7 @@ struct server_queue {
16651665 lock.unlock ();
16661666
16671667 QUE_DBG (" processing task, id = %d\n " , task.id );
1668- callback_new_task (task);
1668+ callback_new_task (std::move ( task) );
16691669 }
16701670
16711671 // all tasks in the current loop is processed, slots data is now ready
@@ -2105,7 +2105,7 @@ struct server_context {
21052105 return true ;
21062106 }
21072107
2108- bool launch_slot_with_task (server_slot & slot, const server_task & task) {
2108+ bool launch_slot_with_task (server_slot & slot, const server_task && task) {
21092109 slot.reset ();
21102110 slot.id_task = task.id ;
21112111 slot.index = task.index ;
@@ -2550,7 +2550,7 @@ struct server_context {
25502550 cancel_tasks.push_back (std::move (task));
25512551 }
25522552 // push to beginning of the queue, so it has highest priority
2553- queue_tasks.post (cancel_tasks, true );
2553+ queue_tasks.post (std::move ( cancel_tasks) , true );
25542554 }
25552555
25562556 // receive the results from task(s)
@@ -2637,7 +2637,7 @@ struct server_context {
26372637 // Functions to process the task
26382638 //
26392639
2640- void process_single_task (server_task & task) {
2640+ void process_single_task (server_task && task) {
26412641 switch (task.type ) {
26422642 case SERVER_TASK_TYPE_COMPLETION:
26432643 case SERVER_TASK_TYPE_INFILL:
@@ -2651,17 +2651,17 @@ struct server_context {
26512651 if (slot == nullptr ) {
26522652 // if no slot is available, we defer this task for processing later
26532653 SRV_DBG (" no slot is available, defer task, id_task = %d\n " , task.id );
2654- queue_tasks.defer (task);
2654+ queue_tasks.defer (std::move ( task) );
26552655 break ;
26562656 }
26572657 if (slot->is_processing ()) {
26582658 // if requested slot is unavailable, we defer this task for processing later
26592659 SRV_DBG (" requested slot is unavailable, defer task, id_task = %d\n " , task.id );
2660- queue_tasks.defer (task);
2660+ queue_tasks.defer (std::move ( task) );
26612661 break ;
26622662 }
26632663
2664- if (!launch_slot_with_task (*slot, task)) {
2664+ if (!launch_slot_with_task (*slot, std::move ( task) )) {
26652665 SRV_ERR (" failed to launch slot with task, id_task = %d\n " , task.id );
26662666 break ;
26672667 }
@@ -2740,7 +2740,7 @@ struct server_context {
27402740 if (slot->is_processing ()) {
27412741 // if requested slot is unavailable, we defer this task for processing later
27422742 SRV_DBG (" requested slot is unavailable, defer task, id_task = %d\n " , task.id );
2743- queue_tasks.defer (task);
2743+ queue_tasks.defer (std::move ( task) );
27442744 break ;
27452745 }
27462746
@@ -2776,7 +2776,7 @@ struct server_context {
27762776 if (slot->is_processing ()) {
27772777 // if requested slot is unavailable, we defer this task for processing later
27782778 SRV_DBG (" requested slot is unavailable, defer task, id_task = %d\n " , task.id );
2779- queue_tasks.defer (task);
2779+ queue_tasks.defer (std::move ( task) );
27802780 break ;
27812781 }
27822782
@@ -2819,7 +2819,7 @@ struct server_context {
28192819 if (slot->is_processing ()) {
28202820 // if requested slot is unavailable, we defer this task for processing later
28212821 SRV_DBG (" requested slot is unavailable, defer task, id_task = %d\n " , task.id );
2822- queue_tasks.defer (task);
2822+ queue_tasks.defer (std::move ( task) );
28232823 break ;
28242824 }
28252825
@@ -2871,7 +2871,7 @@ struct server_context {
28712871
28722872 server_task task (SERVER_TASK_TYPE_NEXT_RESPONSE);
28732873 task.id = queue_tasks.get_new_id ();
2874- queue_tasks.post (task);
2874+ queue_tasks.post (std::move ( task) );
28752875 }
28762876
28772877 // apply context-shift if needed
@@ -3636,7 +3636,7 @@ int main(int argc, char ** argv) {
36363636 server_task task (SERVER_TASK_TYPE_METRICS);
36373637 task.id = ctx_server.queue_tasks .get_new_id ();
36383638 ctx_server.queue_results .add_waiting_task_id (task.id );
3639- ctx_server.queue_tasks .post (task, true ); // high-priority task
3639+ ctx_server.queue_tasks .post (std::move ( task) , true ); // high-priority task
36403640
36413641 // get the result
36423642 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
@@ -3674,7 +3674,7 @@ int main(int argc, char ** argv) {
36743674 task.metrics_reset_bucket = true ;
36753675
36763676 ctx_server.queue_results .add_waiting_task_id (task.id );
3677- ctx_server.queue_tasks .post (task, true ); // high-priority task
3677+ ctx_server.queue_tasks .post (std::move ( task) , true ); // high-priority task
36783678
36793679 // get the result
36803680 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
@@ -3782,7 +3782,7 @@ int main(int argc, char ** argv) {
37823782 task.slot_action .filepath = filepath;
37833783
37843784 ctx_server.queue_results .add_waiting_task_id (task.id );
3785- ctx_server.queue_tasks .post (task);
3785+ ctx_server.queue_tasks .post (std::move ( task) );
37863786
37873787 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
37883788 ctx_server.queue_results .remove_waiting_task_id (task.id );
@@ -3811,7 +3811,7 @@ int main(int argc, char ** argv) {
38113811 task.slot_action .filepath = filepath;
38123812
38133813 ctx_server.queue_results .add_waiting_task_id (task.id );
3814- ctx_server.queue_tasks .post (task);
3814+ ctx_server.queue_tasks .post (std::move ( task) );
38153815
38163816 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
38173817 ctx_server.queue_results .remove_waiting_task_id (task.id );
@@ -3831,7 +3831,7 @@ int main(int argc, char ** argv) {
38313831 task.slot_action .slot_id = id_slot;
38323832
38333833 ctx_server.queue_results .add_waiting_task_id (task.id );
3834- ctx_server.queue_tasks .post (task);
3834+ ctx_server.queue_tasks .post (std::move ( task) );
38353835
38363836 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
38373837 ctx_server.queue_results .remove_waiting_task_id (task.id );
@@ -3973,7 +3973,7 @@ int main(int argc, char ** argv) {
39733973 }
39743974
39753975 ctx_server.queue_results .add_waiting_tasks (tasks);
3976- ctx_server.queue_tasks .post (tasks);
3976+ ctx_server.queue_tasks .post (std::move ( tasks) );
39773977
39783978 bool stream = json_value (data, " stream" , false );
39793979 const auto task_ids = server_task::get_list_id (tasks);
@@ -4284,7 +4284,7 @@ int main(int argc, char ** argv) {
42844284 }
42854285
42864286 ctx_server.queue_results .add_waiting_tasks (tasks);
4287- ctx_server.queue_tasks .post (tasks);
4287+ ctx_server.queue_tasks .post (std::move ( tasks) );
42884288
42894289 // get the result
42904290 std::unordered_set<int > task_ids = server_task::get_list_id (tasks);
@@ -4380,7 +4380,7 @@ int main(int argc, char ** argv) {
43804380 }
43814381
43824382 ctx_server.queue_results .add_waiting_tasks (tasks);
4383- ctx_server.queue_tasks .post (tasks);
4383+ ctx_server.queue_tasks .post (std::move ( tasks) );
43844384
43854385 // get the result
43864386 std::unordered_set<int > task_ids = server_task::get_list_id (tasks);
@@ -4435,7 +4435,7 @@ int main(int argc, char ** argv) {
44354435 task.id = ctx_server.queue_tasks .get_new_id ();
44364436 task.set_lora = parse_lora_request (ctx_server.params_base .lora_adapters , body);
44374437 ctx_server.queue_results .add_waiting_task_id (task.id );
4438- ctx_server.queue_tasks .post (task);
4438+ ctx_server.queue_tasks .post (std::move ( task) );
44394439
44404440 server_task_result_ptr result = ctx_server.queue_results .recv (task.id );
44414441 ctx_server.queue_results .remove_waiting_task_id (task.id );
@@ -4582,8 +4582,8 @@ int main(int argc, char ** argv) {
45824582 common_chat_templates_source (ctx_server.chat_templates .get ()),
45834583 common_chat_format_example (ctx_server.chat_templates .get (), ctx_server.params_base .use_jinja ).c_str ());
45844584
4585- ctx_server.queue_tasks .on_new_task ([&ctx_server](server_task & task) {
4586- ctx_server.process_single_task (task);
4585+ ctx_server.queue_tasks .on_new_task ([&ctx_server](server_task && task) {
4586+ ctx_server.process_single_task (std::move ( task) );
45874587 });
45884588
45894589 ctx_server.queue_tasks .on_update_slots ([&ctx_server]() {
0 commit comments