Merge "Implement finalizer for RS contexts."

This commit is contained in:
Jason Sams
2015-02-20 19:51:54 +00:00
committed by Gerrit Code Review

View File

@@ -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() {