Skip to content
Snippets Groups Projects
Commit f7a334a9 authored by Simon Désaulniers's avatar Simon Désaulniers Committed by Adrien Béraud
Browse files

dht: make sure searchStep is called when needed.

parent 08dc6668
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,7 @@ public:
struct Job {
bool done;
bool cancelled;
time_point time;
std::function<void()> do_;
};
......@@ -51,8 +52,10 @@ public:
* @return pointer to the newly scheduled job.
*/
std::shared_ptr<Scheduler::Job> add(time_point time, std::function<void()> job_func) {
auto job = std::make_shared<Job>(Job {false, false, std::move(job_func)});
timers.emplace(std::move(time), job);
auto scheduled_time = std::max(time, now); /* This should prevent running an auto rescheduling job forever
before the Scheduler::run method ends. */
auto job = std::make_shared<Job>(Job {false, false, scheduled_time, std::move(job_func)});
timers.emplace(std::move(scheduled_time), job);
return job;
}
......@@ -80,7 +83,12 @@ public:
syncTime();
while (not timers.empty()) {
auto timer = timers.begin();
if (timer->first > now)
/*
* Running jobs scheduled before "now" prevents run+rescheduling
* loops before this method ends. It is garanteed by the fact that a
* job will at least be scheduled for "now" and not before.
*/
if (not (timer->first < now))
break;
auto& job = timer->second;
......
......@@ -970,6 +970,9 @@ Dht::searchStep(std::shared_ptr<Search> sr)
}
}
}
/* periodic searchStep scheduling. */
sr->nextSearchStep = scheduler.edit(sr->nextSearchStep, sr->getNextStepTime(types, now));
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment