aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-07-02 00:52:12 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-07-02 00:52:12 +0200
commit9fe05ed1e7fff479430f0042c47842151a0cb68d (patch)
treea689a6db3906e3a417ba32fa690e38093e09a6e7 /OpenKeychain/src/main/java/org
parent39c752727e40fd740b3e1d6ed699d637d1ac5229 (diff)
parentf44f966dc8787682b20782c889386262f49766e7 (diff)
downloadopen-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
Diffstat (limited to 'OpenKeychain/src/main/java/org')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/CloudSearch.java13
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));
}