From 1b4df1697f0d9b5dadfa1aca6c50d845d701ed2c Mon Sep 17 00:00:00 2001 From: Yang Ni Date: Wed, 20 Apr 2016 21:26:24 -0700 Subject: Fixed BaseObj finalizer and destroy() Bug: 28242626 Bug: 27972184 Bug: 27973681 This is resolving issues in ScriptGroup (V1) again. In ScriptGroup.destroy(), we also need to consider the old API where mClosures is not initialized. Also cleaned up the finalizer for ScriptGroup and Allocation: Since BaseObj.finalize() calls BaseObj.helpDestroy(), instead of BaseObj.destroy(), there is no possibility that the finalizers of child objects may race their parents finalizers. Note that helpDestroy() does not try to recurse on child objects. Change-Id: I9dbb2b60f8478f656f8a418c2b5fc8d6848aeef0 --- rs/java/android/renderscript/ScriptGroup.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'rs/java/android/renderscript/ScriptGroup.java') diff --git a/rs/java/android/renderscript/ScriptGroup.java b/rs/java/android/renderscript/ScriptGroup.java index 0d10c6d9dc50..e0bdbfcdfed5 100644 --- a/rs/java/android/renderscript/ScriptGroup.java +++ b/rs/java/android/renderscript/ScriptGroup.java @@ -1066,19 +1066,12 @@ public final class ScriptGroup extends BaseObj { */ public void destroy() { super.destroy(); - for(Closure c : mClosures) { - c.destroy(); - } - } - - protected void finalize() throws Throwable { - // Clear out the list mClosures to avoid double-destroying the closures, - // in case their finalizers race ahead. + // ScriptGroup created using the old Builder class does not + // initialize the field mClosures if (mClosures != null) { - // ScriptGroup created using the old Builder class does not - // initialize the field mClosures - mClosures.clear(); + for (Closure c : mClosures) { + c.destroy(); + } } - super.finalize(); } } -- cgit v1.2.3