Merge pull request #9820 from osmandapp/plan_a_route_executor_bugfix

Plan a route executor multiple calculations bug fix
This commit is contained in:
vshcherb 2020-09-16 21:15:48 +02:00 committed by GitHub
commit 076f91e760
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 2 deletions

View file

@ -243,6 +243,9 @@ public class RoutePlannerFrontEnd {
start = gpxPoints.get(0);
}
while (start != null && !gctx.ctx.calculationProgress.isCancelled) {
if (Thread.currentThread().isInterrupted()) {
return null;
}
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
boolean routeFound = false;

View file

@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -44,6 +45,7 @@ public class GpxApproximator {
private ThreadPoolExecutor singleThreadedExecutor;
private GpxApproximationProgressCallback approximationProgress;
private Future<?> currentApproximationTask;
public interface GpxApproximationProgressCallback {
@ -152,7 +154,10 @@ public class GpxApproximator {
this.gctx = gctx;
startProgress();
updateProgress(gctx);
singleThreadedExecutor.submit(new Runnable() {
if (currentApproximationTask != null) {
currentApproximationTask.cancel(true);
}
currentApproximationTask = singleThreadedExecutor.submit(new Runnable() {
@Override
public void run() {
try {