From 77732c83c9093e929f08940474f73fc62b477a6a Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 1 Jul 2022 17:57:59 +0100 Subject: [PATCH] fix(gui): ignore/limit waiting of canceled search task (#1568) --- jadx-gui/src/main/java/jadx/gui/search/SearchTask.java | 9 +++++++-- .../src/main/java/jadx/gui/ui/dialog/SearchDialog.java | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/search/SearchTask.java b/jadx-gui/src/main/java/jadx/gui/search/SearchTask.java index d49e5169..a7993a06 100644 --- a/jadx-gui/src/main/java/jadx/gui/search/SearchTask.java +++ b/jadx-gui/src/main/java/jadx/gui/search/SearchTask.java @@ -3,6 +3,7 @@ package jadx.gui.search; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -65,6 +66,10 @@ public class SearchTask extends CancelableBackgroundTask { } public synchronized boolean addResult(JNode resultNode) { + if (isCanceled()) { + // ignore new results after cancel + return true; + } this.results.accept(resultNode); if (resultsLimit != 0 && resultsCount.incrementAndGet() >= resultsLimit) { cancel(); @@ -76,9 +81,9 @@ public class SearchTask extends CancelableBackgroundTask { public synchronized void waitTask() { if (future != null) { try { - future.get(); + future.get(2, TimeUnit.SECONDS); } catch (Exception e) { - LOG.error("Wait search task failed", e); + LOG.warn("Wait search task failed", e); } finally { future.cancel(true); future = null; diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java index 9b94fd0c..ac11a326 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/SearchDialog.java @@ -406,7 +406,6 @@ public class SearchDialog extends CommonSearchDialog { private synchronized void stopSearchTask() { if (searchTask != null) { searchTask.cancel(); - searchTask.waitTask(); searchTask = null; } } -- GitLab