Skip to content

Commit

Permalink
Improve logic.
Browse files Browse the repository at this point in the history
  • Loading branch information
fchirica committed Aug 15, 2023
1 parent bc657d4 commit 9276347
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions src/prover_disk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,21 +183,21 @@ class ContextQueue {
GreenReaperContext* pop() {
std::unique_lock<std::mutex> lock(mutex);

if (queue.empty()) {
std::chrono::duration<double> wait_time = std::chrono::seconds(context_queue_timeout);
auto start_time = std::chrono::steady_clock::now();
std::chrono::duration<double> wait_time = std::chrono::seconds(context_queue_timeout);

while (queue.empty() && wait_time.count() > 0) {
if (condition.wait_for(lock, wait_time) == std::cv_status::timeout && queue.empty()) {
throw std::runtime_error("Timeout waiting for context queue.");
}
while (queue.empty() && wait_time.count() > 0) {
auto before_wait = std::chrono::steady_clock::now();

auto elapsed = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start_time);
wait_time = std::chrono::seconds(context_queue_timeout) - elapsed;
}
if (queue.empty()) {
if (condition.wait_for(lock, wait_time) == std::cv_status::timeout && queue.empty()) {
throw std::runtime_error("Timeout waiting for context queue.");
}

auto elapsed = std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - before_wait);
wait_time -= elapsed;
}

if (queue.empty()) {
throw std::runtime_error("Timeout waiting for context queue.");
}

GreenReaperContext* gr = queue.front();
Expand Down

0 comments on commit 9276347

Please sign in to comment.