| Index: libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java |
| diff --git a/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java b/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java |
| index 0840fa3e182bd8896eae3fb937c1415504657cdb..bd2a25719538651340710c400e0180401770b476 100644 |
| --- a/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java |
| +++ b/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java |
| @@ -106,9 +106,6 @@ public class AdblockHelper |
| SharedPreferences prefs = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE); |
| storage = new SharedPrefsStorage(prefs); |
| - // latch is required for async (see `waitForReady()`) |
| - engineCreated = new CountDownLatch(1); |
| - |
| engine = AdblockEngine.create( |
| AdblockEngine.generateAppInfo(context, developmentBuild), |
| context.getCacheDir().getAbsolutePath(), |
| @@ -129,9 +126,6 @@ public class AdblockHelper |
| { |
| Log.w(TAG, "No saved adblock settings"); |
| } |
| - |
| - // unlock waiting client thread |
| - engineCreated.countDown(); |
| } |
| /** |
| @@ -142,7 +136,7 @@ public class AdblockHelper |
| { |
| if (engineCreated == null) |
| { |
| - throw new RuntimeException("AdblockHelper Plus usage exception: call retain(...) first"); |
| + throw new RuntimeException("AdblockHelper Plus usage exception: call retain(true) first"); |
| } |
| try |
| @@ -164,10 +158,6 @@ public class AdblockHelper |
| engine.dispose(); |
| engine = null; |
| - // to unlock waiting client in WaitForReady() |
| - engineCreated.countDown(); |
| - engineCreated = null; |
| - |
| storage = null; |
| } |
| @@ -196,12 +186,18 @@ public class AdblockHelper |
| } |
| else |
| { |
| + // latch is required for async (see `waitForReady()`) |
| + engineCreated = new CountDownLatch(1); |
| + |
| new Thread(new Runnable() |
| { |
| @Override |
| public void run() |
| { |
| createAdblock(); |
| + |
| + // unlock waiting client thread |
| + engineCreated.countDown(); |
| } |
| }).start(); |
| } |
| @@ -215,8 +211,20 @@ public class AdblockHelper |
| { |
| if (referenceCounter.decrementAndGet() == 0) |
| { |
| - waitForReady(); |
| - disposeAdblock(); |
| + if (engineCreated != null) |
| + { |
| + // retained asynchronously |
| + waitForReady(); |
| + disposeAdblock(); |
| + |
| + // to unlock waiting client in waitForReady() |
| + engineCreated.countDown(); |
| + engineCreated = null; |
| + } |
| + else |
| + { |
| + disposeAdblock(); |
| + } |
| } |
| } |
| } |