From 2666d873faf4a9f2b7c661c8a4f11c9898430809 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Thu, 15 Oct 2015 14:54:39 +0200 Subject: [PATCH] Catch stack-overflows occuring while checking in Pfolio --- .../solvers/combinators/PortfolioSolver.scala | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala index 79ee4c3cf..4bfc179a1 100644 --- a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala +++ b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala @@ -40,18 +40,22 @@ class PortfolioSolver[S <: Solver with Interruptible](val context: LeonContext, // solving val fs = solvers.map { s => Future { - val result = s.check - val model: Model = if (result == Some(true)) { - s.getModel - } else { - Model.empty + try { + val result = s.check + val model: Model = if (result == Some(true)) { + s.getModel + } else { + Model.empty + } + (s, result, model) + } catch { + case _: StackOverflowError => + context.reporter.warning("Stack Overflow while running solver.check()!") + (s, None, Model.empty) } - (s, result, model) } } - fs.foreach(_ onFailure { case ex: Throwable => ex.printStackTrace() }) - val result = Future.find(fs)(_._2.isDefined) val res = Await.result(result, Duration.Inf) match { -- GitLab