From ad3cc3c63c6d0f637d2ece3935b5b01b19473299 Mon Sep 17 00:00:00 2001 From: Hans Boehm Date: Tue, 10 May 2016 13:01:22 -0700 Subject: [PATCH] Clear more native pointers in finalizers This hopefully handles the remaining finalizers in frameworks/base that didn't guard against calls from other finalizers after being finalized. The goal here is to reduce the possible corruption causes we have to think about by a few. If any of theses are either very frequently used, or use large Java (as opposed to native) objects, we should probably convert them to NativeAllocationRegistry instead. But that's more work. Bug: 18178237 Change-Id: I79bc0e8fa20af8f340418a6226022e0294d77f02 --- graphics/java/android/graphics/Camera.java | 1 + graphics/java/android/graphics/ColorFilter.java | 1 + graphics/java/android/graphics/DrawFilter.java | 1 + graphics/java/android/graphics/Movie.java | 3 ++- graphics/java/android/graphics/Rasterizer.java | 1 + graphics/java/android/graphics/Xfermode.java | 1 + 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/graphics/java/android/graphics/Camera.java b/graphics/java/android/graphics/Camera.java index 57e0f2714c855..60588d07196ca 100644 --- a/graphics/java/android/graphics/Camera.java +++ b/graphics/java/android/graphics/Camera.java @@ -163,6 +163,7 @@ public class Camera { protected void finalize() throws Throwable { try { nativeDestructor(); + native_instance = 0; } finally { super.finalize(); } diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java index 4838aa0da7598..ac62bf4d69e96 100644 --- a/graphics/java/android/graphics/ColorFilter.java +++ b/graphics/java/android/graphics/ColorFilter.java @@ -40,6 +40,7 @@ public class ColorFilter { super.finalize(); } finally { destroyFilter(native_instance); + native_instance = 0; } } diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java index aaefce95b2901..c7fdcb22c71d4 100644 --- a/graphics/java/android/graphics/DrawFilter.java +++ b/graphics/java/android/graphics/DrawFilter.java @@ -33,6 +33,7 @@ public class DrawFilter { protected void finalize() throws Throwable { try { nativeDestructor(mNativeInt); + mNativeInt = 0; } finally { super.finalize(); } diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java index ecb42553e0950..c8f86c6071321 100644 --- a/graphics/java/android/graphics/Movie.java +++ b/graphics/java/android/graphics/Movie.java @@ -21,7 +21,7 @@ import java.io.InputStream; import java.io.FileInputStream; public class Movie { - private final long mNativeMovie; + private long mNativeMovie; private Movie(long nativeMovie) { if (nativeMovie == 0) { @@ -82,6 +82,7 @@ public class Movie { protected void finalize() throws Throwable { try { nativeDestructor(mNativeMovie); + mNativeMovie = 0; } finally { super.finalize(); } diff --git a/graphics/java/android/graphics/Rasterizer.java b/graphics/java/android/graphics/Rasterizer.java index c351d94e63001..f6a38fe89eab5 100644 --- a/graphics/java/android/graphics/Rasterizer.java +++ b/graphics/java/android/graphics/Rasterizer.java @@ -26,6 +26,7 @@ public class Rasterizer { protected void finalize() throws Throwable { finalizer(native_instance); + native_instance = 0; } private static native void finalizer(long native_instance); diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java index 883350d1ce680..c049e41c65ff1 100644 --- a/graphics/java/android/graphics/Xfermode.java +++ b/graphics/java/android/graphics/Xfermode.java @@ -33,6 +33,7 @@ public class Xfermode { protected void finalize() throws Throwable { try { finalizer(native_instance); + native_instance = 0; } finally { super.finalize(); }