SurfaceControl: Bind close-guard lifetime to native-object lifetime.
Currently there are two bugs in the close-guard behavior: Bug 1: a. Create surface control from parcel, close guard opens b. Import new parcel, last object release close guard closed c. Close guard not reopened, now we have a resource but no close guard Bug 2: a. Construct "new SurfaceControl()" but don't do anything with it b. Now we have a close guard but no native resources This CL ensures the state of the close guard matches the ownership of native resources. Bug: 150128124 Test: Existing tests pass Change-Id: I0155854213ac64be3ac9a5d264815dbd43018fca
This commit is contained in:
@@ -420,6 +420,9 @@ public final class SurfaceControl implements Parcelable {
|
||||
if (mNativeObject != 0) {
|
||||
release();
|
||||
}
|
||||
if (nativeObject != 0) {
|
||||
mCloseGuard.open("release");
|
||||
}
|
||||
mNativeObject = nativeObject;
|
||||
}
|
||||
|
||||
@@ -867,14 +870,12 @@ public final class SurfaceControl implements Parcelable {
|
||||
|
||||
private SurfaceControl(Parcel in) {
|
||||
readFromParcel(in);
|
||||
mCloseGuard.open("release");
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public SurfaceControl() {
|
||||
mCloseGuard.open("release");
|
||||
}
|
||||
|
||||
public void readFromParcel(Parcel in) {
|
||||
@@ -972,8 +973,8 @@ public final class SurfaceControl implements Parcelable {
|
||||
if (mNativeObject != 0) {
|
||||
nativeRelease(mNativeObject);
|
||||
mNativeObject = 0;
|
||||
mCloseGuard.close();
|
||||
}
|
||||
mCloseGuard.close();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user