From 45985e1bdcdd50b7f0f9a625fbec483ae65c6cb7 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Thu, 6 Dec 2012 18:30:52 +0100 Subject: [PATCH] More reliable shutdown --- src/main/scala/leon/synthesis/ParallelSearch.scala | 5 +++++ src/main/scala/leon/synthesis/SimpleSearch.scala | 2 +- .../search/AndOrGraphParallelSearch.scala | 8 +++++--- .../leon/synthesis/search/AndOrGraphSearch.scala | 14 +++++++++++--- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/scala/leon/synthesis/ParallelSearch.scala b/src/main/scala/leon/synthesis/ParallelSearch.scala index befe0ee2a..a6d436509 100644 --- a/src/main/scala/leon/synthesis/ParallelSearch.scala +++ b/src/main/scala/leon/synthesis/ParallelSearch.scala @@ -23,6 +23,11 @@ class ParallelSearch(synth: Synthesizer, SynthesisContext(solver = solver, reporter = synth.reporter, shouldStop = synth.shouldStop) } + override def stop() = { + synth.shouldStop.set(true) + super.stop() + } + def expandAndTask(ref: ActorRef, sctx: SynthesisContext)(t: TaskRunRule) = { val prefix = "[%-20s] ".format(Option(t.rule).getOrElse("?")) diff --git a/src/main/scala/leon/synthesis/SimpleSearch.scala b/src/main/scala/leon/synthesis/SimpleSearch.scala index bc254e2fa..88a51b805 100644 --- a/src/main/scala/leon/synthesis/SimpleSearch.scala +++ b/src/main/scala/leon/synthesis/SimpleSearch.scala @@ -69,7 +69,7 @@ class SimpleSearch(synth: Synthesizer, } def search(): Option[Solution] = { - while (!g.tree.isSolved && !isStopped) { + while (!g.tree.isSolved) { nextLeaf() match { case Some(l) => l match { diff --git a/src/main/scala/leon/synthesis/search/AndOrGraphParallelSearch.scala b/src/main/scala/leon/synthesis/search/AndOrGraphParallelSearch.scala index d0f32ccee..0f126660e 100644 --- a/src/main/scala/leon/synthesis/search/AndOrGraphParallelSearch.scala +++ b/src/main/scala/leon/synthesis/search/AndOrGraphParallelSearch.scala @@ -14,7 +14,7 @@ abstract class AndOrGraphParallelSearch[WC, def initWorkerContext(w: ActorRef): WC - val nWorkers = 5 + val nWorkers = 7 val timeout = 600.seconds var system: ActorSystem = _ @@ -128,8 +128,10 @@ abstract class AndOrGraphParallelSearch[WC, sendWork() case Terminated(w) => - processing -= workers(w).get - workers -= w + if (workers contains w) { + processing -= workers(w).get + workers -= w + } } } diff --git a/src/main/scala/leon/synthesis/search/AndOrGraphSearch.scala b/src/main/scala/leon/synthesis/search/AndOrGraphSearch.scala index 1291babe9..bf3fed4e9 100644 --- a/src/main/scala/leon/synthesis/search/AndOrGraphSearch.scala +++ b/src/main/scala/leon/synthesis/search/AndOrGraphSearch.scala @@ -60,10 +60,8 @@ abstract class AndOrGraphSearch[AT <: AOAndTask[S], case class ExpandSuccess[T <: AOTask[S]](sol: S) extends ExpandResult[T] case class ExpandFailure[T <: AOTask[S]]() extends ExpandResult[T] - var isStopped = false - def stop() { - isStopped = true + } def search(): Option[S] @@ -79,6 +77,11 @@ abstract class AndOrGraphSearch[AT <: AOAndTask[S], al.isUnsolvable = true al.parent.unsolvable(al) } + + if (g.tree.isSolved) { + stop() + } + processing -= al } @@ -93,6 +96,11 @@ abstract class AndOrGraphSearch[AT <: AOAndTask[S], ol.isUnsolvable = true ol.parent.unsolvable(ol) } + + if (g.tree.isSolved) { + stop() + } + processing -= ol } } -- GitLab