summaryrefslogtreecommitdiff
path: root/apt-pkg/solver3.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2025-02-10 19:56:16 +0100
committerJulian Andres Klode <julian.klode@canonical.com>2025-02-14 19:04:56 +0100
commita9587b39ea6776b1d1324288786176102f65cee5 (patch)
treed475c30cddec0d15343a3fab9a5ed9b3a1fbe402 /apt-pkg/solver3.cc
parent222271ee0d44c8e7bc00935fbbc2615529a4cdfc (diff)
solver3: Implement a timeout, default 10s
A SAT solver can run more or less forever, but that's not a good user experience.
Diffstat (limited to 'apt-pkg/solver3.cc')
-rw-r--r--apt-pkg/solver3.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc
index b4a69d844..d363cdee7 100644
--- a/apt-pkg/solver3.cc
+++ b/apt-pkg/solver3.cc
@@ -32,8 +32,9 @@
#include <apt-pkg/solver3.h>
#include <apt-pkg/version.h>
-#include <algorithm>
#include <cassert>
+#include <chrono>
+#include <ctime>
#include <sstream>
// FIXME: Helpers stolen from DepCache, please give them back.
@@ -740,6 +741,10 @@ bool APT::Solver::Pop()
for (std::string msg; _error->PopMessage(msg);)
std::cerr << "Branch failed: " << msg << std::endl;
+ time_t now = time(nullptr);
+ if (now - startTime >= Timeout)
+ return _error->Error("Solver timed out.");
+
_error->RevertToStack();
assert(choices.back() < solved.size());
@@ -834,6 +839,7 @@ void APT::Solver::RescoreWorkIfNeeded()
bool APT::Solver::Solve()
{
+ startTime = time(nullptr);
while (true)
{
while (not Propagate())