fixed the task executor

This commit is contained in:
WolverinDEV 2021-02-24 20:41:26 +01:00
parent 539d94e724
commit dd8ea1c8d9

View File

@ -316,7 +316,9 @@ void task_executor::executor(std::shared_ptr<executor_context> executor_context)
} }
auto execute_timestamp = system_clock::now(); auto execute_timestamp = system_clock::now();
if(task_context->task_recurring_head && task_context->task_recurring_head->scheduled_invoke <= execute_timestamp) { std::chrono::system_clock::time_point next_timestamp{};
if(task_context->task_recurring_head) {
if(task_context->task_recurring_head->scheduled_invoke <= execute_timestamp) {
auto task = task_context->task_recurring_head; auto task = task_context->task_recurring_head;
task_context->task_recurring_head = task->next; task_context->task_recurring_head = task->next;
@ -336,7 +338,7 @@ void task_executor::executor(std::shared_ptr<executor_context> executor_context)
} }
task->last_invoked = execute_timestamp; task->last_invoked = execute_timestamp;
task->scheduled_invoke = std::min(system_clock::now(), execute_timestamp + task->interval); task->scheduled_invoke = std::max(system_clock::now(), execute_timestamp + task->interval);
task_lock.lock(); task_lock.lock();
executor_context->executing_recurring_task = nullptr; executor_context->executing_recurring_task = nullptr;
@ -346,8 +348,15 @@ void task_executor::executor(std::shared_ptr<executor_context> executor_context)
executor_context->handle->enqueue_recurring_task(task); executor_context->handle->enqueue_recurring_task(task);
} }
continue; continue;
} else {
next_timestamp = task_context->task_recurring_head->scheduled_invoke;
}
} }
if(next_timestamp.time_since_epoch().count() > 0) {
task_context->notify.wait_until(task_lock, next_timestamp);
} else {
task_context->notify.wait(task_lock); task_context->notify.wait(task_lock);
} }
}
} }