summaryrefslogtreecommitdiffstats
path: root/rs/java/android/renderscript/RenderScript.java
diff options
context:
space:
mode:
authorJason Sams <jsams@google.com>2015-02-20 19:51:54 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-02-20 19:51:54 +0000
commitadb52ef7034d4d3e0eee58cedae2a343d29771b9 (patch)
tree954c742f98a4ef7f542bcea3b3ac23c2dac82452 /rs/java/android/renderscript/RenderScript.java
parent0a7936b7c54fb7dff0406a40452cb0242f66a067 (diff)
parentd22a6f09dc4df8fd19b85bace5085aa099b90e53 (diff)
downloadframeworks_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.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() {