diff options
author | Jason Sams <jsams@google.com> | 2015-02-20 19:51:54 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-02-20 19:51:54 +0000 |
commit | adb52ef7034d4d3e0eee58cedae2a343d29771b9 (patch) | |
tree | 954c742f98a4ef7f542bcea3b3ac23c2dac82452 /rs/java/android/renderscript/RenderScript.java | |
parent | 0a7936b7c54fb7dff0406a40452cb0242f66a067 (diff) | |
parent | d22a6f09dc4df8fd19b85bace5085aa099b90e53 (diff) | |
download | frameworks_base-adb52ef7034d4d3e0eee58cedae2a343d29771b9.zip frameworks_base-adb52ef7034d4d3e0eee58cedae2a343d29771b9.tar.gz frameworks_base-adb52ef7034d4d3e0eee58cedae2a343d29771b9.tar.bz2 |
Merge "Implement finalizer for RS contexts."
Diffstat (limited to 'rs/java/android/renderscript/RenderScript.java')
-rw-r--r-- | rs/java/android/renderscript/RenderScript.java | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java index e7487aa..417bfe2 100644 --- a/rs/java/android/renderscript/RenderScript.java +++ b/rs/java/android/renderscript/RenderScript.java @@ -938,6 +938,8 @@ public class RenderScript { long mDev; long mContext; + private boolean mDestroyed = false; + @SuppressWarnings({"FieldCanBeLocal"}) MessageThread mMessageThread; @@ -1382,6 +1384,38 @@ public class RenderScript { nContextFinish(); } + private void helpDestroy() { + boolean shouldDestroy = false; + synchronized(this) { + if (!mDestroyed) { + shouldDestroy = true; + mDestroyed = true; + } + } + + if (shouldDestroy) { + nContextFinish(); + + nContextDeinitToClient(mContext); + mMessageThread.mRun = false; + try { + mMessageThread.join(); + } catch(InterruptedException e) { + } + + nContextDestroy(); + + nDeviceDestroy(mDev); + mDev = 0; + } + } + + protected void finalize() throws Throwable { + helpDestroy(); + super.finalize(); + } + + /** * Destroys this RenderScript context. Once this function is called, * using this context or any objects belonging to this context is @@ -1390,19 +1424,7 @@ public class RenderScript { */ public void destroy() { validate(); - nContextFinish(); - - nContextDeinitToClient(mContext); - mMessageThread.mRun = false; - try { - mMessageThread.join(); - } catch(InterruptedException e) { - } - - nContextDestroy(); - - nDeviceDestroy(mDev); - mDev = 0; + helpDestroy(); } boolean isAlive() { |