 Issue 29361556:
  Issue 4591 - Crash after dispose  (Closed)
    
  
    Issue 29361556:
  Issue 4591 - Crash after dispose  (Closed) 
  | Index: libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java | 
| diff --git a/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java b/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java | 
| index 1046b73471026950f83c0915942215a8f1052be2..83ca9d79859343058aef4a4dfc29f4d0fe9497c4 100644 | 
| --- a/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java | 
| +++ b/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java | 
| @@ -103,46 +103,6 @@ public final class AdblockEngine | 
| .build(); | 
| } | 
| - public static final UpdateAvailableCallback UPDATE_AVAILABLE_CALLBACK = | 
| - new UpdateAvailableCallback() | 
| - { | 
| - @Override | 
| - public void updateAvailableCallback(String url) | 
| - { | 
| - Log.d(TAG, "Update available for " + url); | 
| - } | 
| - }; | 
| - | 
| - public static final UpdateCheckDoneCallback UPDATE_CHECK_DONE_CALLBACK = | 
| - new UpdateCheckDoneCallback() | 
| - { | 
| - @Override | 
| - public void updateCheckDoneCallback(String error) | 
| - { | 
| - Log.d(TAG, "Update check done, error: " + error); | 
| - } | 
| - }; | 
| - | 
| - public static final ShowNotificationCallback SHOW_NOTIFICATION_CALLBACK = | 
| - new ShowNotificationCallback() | 
| - { | 
| - @Override | 
| - public void showNotificationCallback(Notification jsValue) | 
| - { | 
| - Log.d(TAG, "Notification: " + jsValue); | 
| - } | 
| - }; | 
| - | 
| - public static final FilterChangeCallback FILTER_CHANGE_CALLBACK = | 
| - new FilterChangeCallback() | 
| - { | 
| - @Override | 
| - public void filterChangeCallback(String action, JsValue jsValue) | 
| - { | 
| - Log.d(TAG, "Filter changed: " + action + (!jsValue.isUndefined() ? ", " + jsValue : "")); | 
| - } | 
| - }; | 
| - | 
| public static AdblockEngine create(final Context context, final AppInfo appInfo, | 
| final String basePath, boolean enableElemhide, | 
| UpdateAvailableCallback updateAvailableCallback, | 
| @@ -193,28 +153,13 @@ public final class AdblockEngine | 
| public static AdblockEngine create(final Context context, final AppInfo appInfo, | 
| final String basePath, boolean elemhideEnabled) | 
| { | 
| - return create(context, appInfo, basePath, elemhideEnabled, | 
| - UPDATE_AVAILABLE_CALLBACK, UPDATE_CHECK_DONE_CALLBACK, | 
| - SHOW_NOTIFICATION_CALLBACK, FILTER_CHANGE_CALLBACK); | 
| + return create(context, appInfo, basePath, elemhideEnabled, null, null, null, null); | 
| 
diegocarloslima
2016/11/04 10:35:15
Is this callback cleanup related to the crash? If
 
anton
2016/11/07 07:35:14
Yes, it's related as since we use smart pointers c
 
Felix Dahlke
2016/11/18 06:56:55
So what if the user passes these callback objects
 | 
| } | 
| public void dispose() | 
| { | 
| Log.w(TAG, "Dispose"); | 
| - // Safe disposing (just in case) | 
| - if (this.filterEngine != null) | 
| - { | 
| - this.filterEngine.dispose(); | 
| - this.filterEngine = null; | 
| - } | 
| - | 
| - if (this.jsEngine != null) | 
| - { | 
| - this.jsEngine.dispose(); | 
| - this.jsEngine = null; | 
| - } | 
| - | 
| if (this.logSystem != null) | 
| { | 
| this.logSystem.dispose(); | 
| @@ -229,6 +174,11 @@ public final class AdblockEngine | 
| if (this.updateAvailableCallback != null) | 
| { | 
| + if (this.filterEngine != null) | 
| + { | 
| + this.filterEngine.removeUpdateAvailableCallback(); | 
| + } | 
| + | 
| this.updateAvailableCallback.dispose(); | 
| this.updateAvailableCallback = null; | 
| } | 
| @@ -241,15 +191,38 @@ public final class AdblockEngine | 
| if (this.filterChangeCallback != null) | 
| { | 
| + if (this.filterEngine != null) | 
| + { | 
| + this.filterEngine.removeFilterChangeCallback(); | 
| + } | 
| + | 
| this.filterChangeCallback.dispose(); | 
| this.filterChangeCallback = null; | 
| } | 
| if (this.showNotificationCallback != null) | 
| { | 
| + if (this.filterEngine != null) | 
| + { | 
| + this.filterEngine.removeShowNotificationCallback(); | 
| + } | 
| + | 
| this.showNotificationCallback.dispose(); | 
| this.showNotificationCallback = null; | 
| } | 
| + | 
| + // Safe disposing (just in case) | 
| + if (this.filterEngine != null) | 
| + { | 
| + this.filterEngine.dispose(); | 
| + this.filterEngine = null; | 
| + } | 
| + | 
| + if (this.jsEngine != null) | 
| + { | 
| + this.jsEngine.dispose(); | 
| + this.jsEngine = null; | 
| + } | 
| } | 
| public boolean isFirstRun() |