summaryrefslogtreecommitdiffstats
path: root/rs/java/android/renderscript
diff options
context:
space:
mode:
authorJason Sams <jsams@google.com>2015-02-20 20:00:40 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-02-20 20:00:40 +0000
commita15ac5fea3c88f908bf808d7b4cda276fb3f513f (patch)
tree8f54a3dafc2ea3e60f6487157d52726b939f7c69 /rs/java/android/renderscript
parent4fecab570da64a1956352aedf1b3245d3ba26030 (diff)
parentadb52ef7034d4d3e0eee58cedae2a343d29771b9 (diff)
downloadframeworks_base-a15ac5fea3c88f908bf808d7b4cda276fb3f513f.zip
frameworks_base-a15ac5fea3c88f908bf808d7b4cda276fb3f513f.tar.gz
frameworks_base-a15ac5fea3c88f908bf808d7b4cda276fb3f513f.tar.bz2
am adb52ef7: Merge "Implement finalizer for RS contexts."
* commit 'adb52ef7034d4d3e0eee58cedae2a343d29771b9': Implement finalizer for RS contexts.
Diffstat (limited to 'rs/java/android/renderscript')
-rw-r--r--rs/java/android/renderscript/RenderScript.java48
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() {