am c0ce6c42: Merge "Reduce risk of memory corruption due to finalization."
* commit 'c0ce6c422cfe089e7a8e209ac924e37bed3ca770':
Reduce risk of memory corruption due to finalization.
diff --git a/graphics/java/android/graphics/Interpolator.java b/graphics/java/android/graphics/Interpolator.java
index f695a9e..1045464 100644
--- a/graphics/java/android/graphics/Interpolator.java
+++ b/graphics/java/android/graphics/Interpolator.java
@@ -147,11 +147,12 @@
@Override
protected void finalize() throws Throwable {
nativeDestructor(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
}
private int mValueCount;
private int mFrameCount;
- private final long native_instance;
+ private long native_instance;
private static native long nativeConstructor(int valueCount, int frameCount);
private static native void nativeDestructor(long native_instance);
diff --git a/graphics/java/android/graphics/MaskFilter.java b/graphics/java/android/graphics/MaskFilter.java
index 27a7dda..d474315 100644
--- a/graphics/java/android/graphics/MaskFilter.java
+++ b/graphics/java/android/graphics/MaskFilter.java
@@ -25,6 +25,7 @@
protected void finalize() throws Throwable {
nativeDestructor(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
}
private static native void nativeDestructor(long native_filter);
diff --git a/graphics/java/android/graphics/Matrix.java b/graphics/java/android/graphics/Matrix.java
index 90e5a4e..1e8f11b 100644
--- a/graphics/java/android/graphics/Matrix.java
+++ b/graphics/java/android/graphics/Matrix.java
@@ -827,6 +827,7 @@
protected void finalize() throws Throwable {
try {
finalizer(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/NinePatch.java b/graphics/java/android/graphics/NinePatch.java
index 21a212a..00ed400 100644
--- a/graphics/java/android/graphics/NinePatch.java
+++ b/graphics/java/android/graphics/NinePatch.java
@@ -71,7 +71,7 @@
*
* @hide
*/
- public final long mNativeChunk;
+ public long mNativeChunk;
private Paint mPaint;
private String mSrcName;
@@ -121,6 +121,7 @@
if (mNativeChunk != 0) {
// only attempt to destroy correctly initilized chunks
nativeFinalize(mNativeChunk);
+ mNativeChunk = 0;
}
} finally {
super.finalize();
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index c5d68bd..031263b 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -2435,6 +2435,7 @@
protected void finalize() throws Throwable {
try {
finalizer(mNativePaint);
+ mNativePaint = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java
index 0e9823d..42a3600 100644
--- a/graphics/java/android/graphics/Path.java
+++ b/graphics/java/android/graphics/Path.java
@@ -27,7 +27,7 @@
/**
* @hide
*/
- public final long mNativePath;
+ public long mNativePath;
/**
* @hide
@@ -746,6 +746,7 @@
protected void finalize() throws Throwable {
try {
finalizer(mNativePath);
+ mNativePath = 0; // Other finalizers can still call us.
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/PathEffect.java b/graphics/java/android/graphics/PathEffect.java
index 617dfca..3292501 100644
--- a/graphics/java/android/graphics/PathEffect.java
+++ b/graphics/java/android/graphics/PathEffect.java
@@ -25,6 +25,7 @@
protected void finalize() throws Throwable {
nativeDestructor(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
}
private static native void nativeDestructor(long native_patheffect);
diff --git a/graphics/java/android/graphics/PathMeasure.java b/graphics/java/android/graphics/PathMeasure.java
index 7cc9765..0416159 100644
--- a/graphics/java/android/graphics/PathMeasure.java
+++ b/graphics/java/android/graphics/PathMeasure.java
@@ -142,6 +142,7 @@
protected void finalize() throws Throwable {
native_destroy(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
}
private static native long native_create(long native_path, boolean forceClosed);
@@ -154,6 +155,6 @@
private static native boolean native_nextContour(long native_instance);
private static native void native_destroy(long native_instance);
- /* package */private final long native_instance;
+ /* package */private long native_instance;
}
diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java
index 0e55089..28d8690 100644
--- a/graphics/java/android/graphics/Picture.java
+++ b/graphics/java/android/graphics/Picture.java
@@ -29,7 +29,7 @@
*/
public class Picture {
private Canvas mRecordingCanvas;
- private final long mNativePicture;
+ private long mNativePicture;
private static final int WORKING_STREAM_STORAGE = 16 * 1024;
@@ -60,6 +60,7 @@
protected void finalize() throws Throwable {
try {
nativeDestructor(mNativePicture);
+ mNativePicture = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java
index 727723d..de89ad0 100644
--- a/graphics/java/android/graphics/Region.java
+++ b/graphics/java/android/graphics/Region.java
@@ -30,7 +30,7 @@
/**
* @hide
*/
- public final long mNativeRegion;
+ public long mNativeRegion;
// the native values for these must match up with the enum in SkRegion.h
public enum Op {
@@ -380,6 +380,7 @@
protected void finalize() throws Throwable {
try {
nativeDestructor(mNativeRegion);
+ mNativeRegion = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/RegionIterator.java b/graphics/java/android/graphics/RegionIterator.java
index 8401adb..443b23c 100644
--- a/graphics/java/android/graphics/RegionIterator.java
+++ b/graphics/java/android/graphics/RegionIterator.java
@@ -43,12 +43,13 @@
protected void finalize() throws Throwable {
nativeDestructor(mNativeIter);
+ mNativeIter = 0; // Other finalizers can still call us.
}
private static native long nativeConstructor(long native_region);
private static native void nativeDestructor(long native_iter);
private static native boolean nativeNext(long native_iter, Rect r);
- private final long mNativeIter;
+ private long mNativeIter;
}
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index a96d2cb..adb282f 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -91,6 +91,7 @@
super.finalize();
} finally {
nativeDestructor(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
}
}
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index db42314..7eb5584 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -358,6 +358,7 @@
protected void finalize() throws Throwable {
try {
nativeUnref(native_instance);
+ native_instance = 0; // Other finalizers can still call us.
} finally {
super.finalize();
}