diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-07-02 00:52:12 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-07-02 00:52:12 +0200 |
commit | 9fe05ed1e7fff479430f0042c47842151a0cb68d (patch) | |
tree | a689a6db3906e3a417ba32fa690e38093e09a6e7 | |
parent | 39c752727e40fd740b3e1d6ed699d637d1ac5229 (diff) | |
parent | f44f966dc8787682b20782c889386262f49766e7 (diff) | |
download | open-keychain-9fe05ed1e7fff479430f0042c47842151a0cb68d.tar.gz open-keychain-9fe05ed1e7fff479430f0042c47842151a0cb68d.tar.bz2 open-keychain-9fe05ed1e7fff479430f0042c47842151a0cb68d.zip |
Merge pull request #1399 from open-keychain/thread-cleanup
Kill search threads that have not returned
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java index c0221fad3..649cede10 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java @@ -45,6 +45,7 @@ public class CloudSearch { } final ImportKeysList results = new ImportKeysList(servers.size()); + ArrayList<Thread> searchThreads = new ArrayList<>(); for (final Keyserver keyserver : servers) { Runnable r = new Runnable() { @Override @@ -57,19 +58,25 @@ public class CloudSearch { results.finishedAdding(); // notifies if all searchers done } }; - new Thread(r).start(); + Thread searchThread = new Thread(r); + searchThreads.add(searchThread); + searchThread.start(); } // wait for either all the searches to come back, or 10 seconds - synchronized(results) { + synchronized (results) { try { results.wait(10 * SECONDS); + for (Thread thread : searchThreads) { + // kill threads that haven't returned yet + thread.interrupt(); + } } catch (InterruptedException e) { } } if (results.outstandingSuppliers() > 0) { - String message = "Launched " + servers.size() + " cloud searchers, but" + + String message = "Launched " + servers.size() + " cloud searchers, but" + results.outstandingSuppliers() + "failed to complete."; problems.add(new Keyserver.QueryFailedException(message)); } |