Skip to content

Commit

Permalink
fix subsearch listener in basic parallel search #34
Browse files Browse the repository at this point in the history
  • Loading branch information
hdbeukel committed Aug 16, 2016
1 parent 69bb865 commit f6bfd50
Showing 1 changed file with 15 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ public void addSearch(Search<SolutionType> search) {
synchronized (getStatusLock()) {
// assert idle
assertIdle("Cannot add search to basic parallel search algorithm.");
if (search.getProblem() == getProblem()) {
if (search.getProblem().equals(getProblem())) {
// listen to events fired by subsearch
search.addSearchListener(subsearchListener);
// add search
searches.add(search);
} else {
Expand All @@ -145,8 +147,14 @@ public boolean removeSearch(Search<SolutionType> search) {
synchronized (getStatusLock()) {
// assert idle
assertIdle("Cannot remove search from basic parallel search algorithm.");
// remove search
return searches.remove(search);
// check if search was added
if(searches.contains(search)){
// remove search
searches.remove(search);
// stop listening to events fired by this search
search.removeSearchListener(subsearchListener);
}
return false;
}
}

Expand Down Expand Up @@ -198,7 +206,7 @@ public void stop() {
@Override
protected void searchDisposed() {
// release thread pool
pool.shutdown();
pool.shutdown();
// dispose contained searches
searches.forEach(s -> s.dispose());
// dispose super
Expand All @@ -213,13 +221,8 @@ protected void searchDisposed() {
*/
@Override
protected void searchStep() {
// (1) execute subsearches in parallel (+ add listener)
searches.forEach(s -> {
// listen to events fired by subsearch
s.addSearchListener(subsearchListener);
// submit to thread pool
futures.add(pool.submit(s));
});
// (1) execute subsearches in parallel
searches.forEach(s -> futures.add(pool.submit(s)));
// (2) wait for termination of subsearches
while (!futures.isEmpty()) {
try {
Expand All @@ -229,9 +232,7 @@ protected void searchStep() {
+ "in basic parallel search.", ex);
}
}
// (3) stop listening to subsearches
searches.forEach(s -> s.removeSearchListener(subsearchListener));
// (4) stop main search
// (3) stop main search
stop();
}

Expand Down

0 comments on commit f6bfd50

Please sign in to comment.