summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2017-03-22 14:28:08 +0000
committerNarayan Kamath <narayan@google.com>2017-04-03 18:12:04 +0100
commit492e9e851cadca62df84eaff1a3c1ba788492fba (patch)
tree61d47e46bb22366413a021f025b3c8e16713c55b
parent2a071d69b455399474d56cd2099e9944aec83224 (diff)
Properly guard access to CloseGuard in finalizers.
CloseGuard instances are allocated in constructors and usually assigned to final fields. This implies they're non-null in finalizers except in the case where the constructor throws. We add a null check to make sure we can continue cleaning up other state in the finalizer (if applicable). Also, this change decouples closeguard warnings in constructors from other state based logic. This because the logic there is usually duplicated with the call to close(). NOTE: This change is not a "complete" fix. Many of these finalizers are broken in the case where <init> throws. The only objective of this change is to make such errors more obvious. Note that some of these classes don't have CTS tests. Test: make, CtsMediaTestCases. Bug: 35609098 Change-Id: I24d9e0215f80e44914dba8ab99b6312fd6ed1fc0
-rw-r--r--core/java/android/content/ContentProviderClient.java10
-rw-r--r--core/java/android/content/ContentResolver.java5
-rw-r--r--core/java/android/hardware/SensorDirectChannel.java5
-rw-r--r--core/java/android/hardware/usb/UsbDeviceConnection.java4
-rw-r--r--core/java/android/hardware/usb/UsbRequest.java5
-rw-r--r--core/java/android/util/MemoryIntArray.java5
-rw-r--r--drm/java/android/drm/DrmManagerClient.java5
-rw-r--r--graphics/java/android/graphics/pdf/PdfDocument.java5
-rw-r--r--graphics/java/android/graphics/pdf/PdfEditor.java5
-rw-r--r--graphics/java/android/graphics/pdf/PdfRenderer.java10
-rw-r--r--media/java/android/media/MediaScanner.java5
-rw-r--r--media/java/android/media/midi/MidiDevice.java10
-rw-r--r--media/java/android/media/midi/MidiDeviceServer.java5
-rw-r--r--media/java/android/media/midi/MidiInputPort.java5
-rw-r--r--media/java/android/media/midi/MidiOutputPort.java5
-rwxr-xr-xmedia/java/android/mtp/MtpDatabase.java5
-rw-r--r--media/java/android/mtp/MtpDevice.java5
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java5
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java5
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java5
-rw-r--r--services/core/java/com/android/server/tv/UinputBridge.java2
-rw-r--r--tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb/externalmanagementtest/UsbDeviceStateController.java5
-rw-r--r--wifi/java/android/net/wifi/aware/DiscoverySession.java5
-rw-r--r--wifi/java/android/net/wifi/aware/WifiAwareSession.java5
24 files changed, 104 insertions, 27 deletions
diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java
index a04a7b25d3b1..f8c139feaae3 100644
--- a/core/java/android/content/ContentProviderClient.java
+++ b/core/java/android/content/ContentProviderClient.java
@@ -524,7 +524,10 @@ public class ContentProviderClient implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
@@ -579,7 +582,10 @@ public class ContentProviderClient implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 98ae132d9ed7..69cd99c41b14 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -2942,7 +2942,10 @@ public abstract class ContentResolver {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/core/java/android/hardware/SensorDirectChannel.java b/core/java/android/hardware/SensorDirectChannel.java
index a65d57daa12c..2c499b01faab 100644
--- a/core/java/android/hardware/SensorDirectChannel.java
+++ b/core/java/android/hardware/SensorDirectChannel.java
@@ -152,7 +152,10 @@ public final class SensorDirectChannel implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/core/java/android/hardware/usb/UsbDeviceConnection.java b/core/java/android/hardware/usb/UsbDeviceConnection.java
index ffd6ec32fccc..1bf2137885b2 100644
--- a/core/java/android/hardware/usb/UsbDeviceConnection.java
+++ b/core/java/android/hardware/usb/UsbDeviceConnection.java
@@ -332,7 +332,9 @@ public class UsbDeviceConnection {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
} finally {
super.finalize();
}
diff --git a/core/java/android/hardware/usb/UsbRequest.java b/core/java/android/hardware/usb/UsbRequest.java
index badb344aabad..61637e964a08 100644
--- a/core/java/android/hardware/usb/UsbRequest.java
+++ b/core/java/android/hardware/usb/UsbRequest.java
@@ -114,7 +114,10 @@ public class UsbRequest {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java
index 749cf08c8396..b3fe8a866653 100644
--- a/core/java/android/util/MemoryIntArray.java
+++ b/core/java/android/util/MemoryIntArray.java
@@ -158,7 +158,10 @@ public final class MemoryIntArray implements Parcelable, Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
IoUtils.closeQuietly(this);
} finally {
super.finalize();
diff --git a/drm/java/android/drm/DrmManagerClient.java b/drm/java/android/drm/DrmManagerClient.java
index 5973d3e33323..76eab4a7905a 100644
--- a/drm/java/android/drm/DrmManagerClient.java
+++ b/drm/java/android/drm/DrmManagerClient.java
@@ -262,7 +262,10 @@ public class DrmManagerClient implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/graphics/java/android/graphics/pdf/PdfDocument.java b/graphics/java/android/graphics/pdf/PdfDocument.java
index d60343658ee3..1b8336f54637 100644
--- a/graphics/java/android/graphics/pdf/PdfDocument.java
+++ b/graphics/java/android/graphics/pdf/PdfDocument.java
@@ -202,7 +202,10 @@ public class PdfDocument {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
dispose();
} finally {
super.finalize();
diff --git a/graphics/java/android/graphics/pdf/PdfEditor.java b/graphics/java/android/graphics/pdf/PdfEditor.java
index cd1f8de6ee0f..245d76917453 100644
--- a/graphics/java/android/graphics/pdf/PdfEditor.java
+++ b/graphics/java/android/graphics/pdf/PdfEditor.java
@@ -270,7 +270,10 @@ public final class PdfEditor {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
if (mInput != null) {
doClose();
}
diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java
index 7b7a2909b36d..b7b81aef36fd 100644
--- a/graphics/java/android/graphics/pdf/PdfRenderer.java
+++ b/graphics/java/android/graphics/pdf/PdfRenderer.java
@@ -230,7 +230,10 @@ public final class PdfRenderer implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
if (mInput != null) {
doClose();
}
@@ -444,7 +447,10 @@ public final class PdfRenderer implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
if (mNativePage != 0) {
doClose();
}
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index ddfa0258ab9a..cb4e46fe945a 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -1958,7 +1958,10 @@ public class MediaScanner implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/media/java/android/media/midi/MidiDevice.java b/media/java/android/media/midi/MidiDevice.java
index f7dd0b312426..a99573692664 100644
--- a/media/java/android/media/midi/MidiDevice.java
+++ b/media/java/android/media/midi/MidiDevice.java
@@ -103,7 +103,10 @@ public final class MidiDevice implements Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mGuard.warnIfOpen();
+ if (mGuard != null) {
+ mGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
@@ -285,7 +288,10 @@ public final class MidiDevice implements Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mGuard.warnIfOpen();
+ if (mGuard != null) {
+ mGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/media/java/android/media/midi/MidiDeviceServer.java b/media/java/android/media/midi/MidiDeviceServer.java
index eaa86542ca27..51d552066bc6 100644
--- a/media/java/android/media/midi/MidiDeviceServer.java
+++ b/media/java/android/media/midi/MidiDeviceServer.java
@@ -429,7 +429,10 @@ public final class MidiDeviceServer implements Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mGuard.warnIfOpen();
+ if (mGuard != null) {
+ mGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/media/java/android/media/midi/MidiInputPort.java b/media/java/android/media/midi/MidiInputPort.java
index 98ec7795262c..a300886ea7c1 100644
--- a/media/java/android/media/midi/MidiInputPort.java
+++ b/media/java/android/media/midi/MidiInputPort.java
@@ -159,7 +159,10 @@ public final class MidiInputPort extends MidiReceiver implements Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mGuard.warnIfOpen();
+ if (mGuard != null) {
+ mGuard.warnIfOpen();
+ }
+
// not safe to make binder calls from finalize()
mDeviceServer = null;
close();
diff --git a/media/java/android/media/midi/MidiOutputPort.java b/media/java/android/media/midi/MidiOutputPort.java
index ce0402c2465b..511f6cd51917 100644
--- a/media/java/android/media/midi/MidiOutputPort.java
+++ b/media/java/android/media/midi/MidiOutputPort.java
@@ -145,7 +145,10 @@ public final class MidiOutputPort extends MidiSender implements Closeable {
@Override
protected void finalize() throws Throwable {
try {
- mGuard.warnIfOpen();
+ if (mGuard != null) {
+ mGuard.warnIfOpen();
+ }
+
// not safe to make binder calls from finalize()
mDeviceServer = null;
close();
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 56a573736c31..698c9c96fe01 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -233,7 +233,10 @@ public class MtpDatabase implements AutoCloseable {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/media/java/android/mtp/MtpDevice.java b/media/java/android/mtp/MtpDevice.java
index d6958b324ca3..e8b04edb2e1b 100644
--- a/media/java/android/mtp/MtpDevice.java
+++ b/media/java/android/mtp/MtpDevice.java
@@ -123,7 +123,10 @@ public final class MtpDevice {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
index 6140428d353f..653a45351691 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
@@ -171,8 +171,11 @@ public final class PageContentRepository {
@Override
protected void finalize() throws Throwable {
try {
- if (mState != STATE_DESTROYED) {
+ if (mCloseGuard != null) {
mCloseGuard.warnIfOpen();
+ }
+
+ if (mState != STATE_DESTROYED) {
destroy(null);
}
} finally {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
index 54400b3b8540..e172948fffd6 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
@@ -552,8 +552,11 @@ public final class PageAdapter extends Adapter<ViewHolder> {
@Override
protected void finalize() throws Throwable {
try {
- if (mState != STATE_DESTROYED) {
+ if (mCloseGuard != null) {
mCloseGuard.warnIfOpen();
+ }
+
+ if (mState != STATE_DESTROYED) {
destroy(null);
}
} finally {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 9e275a8521fb..1415819a6aad 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -22055,7 +22055,10 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
close();
} finally {
super.finalize();
diff --git a/services/core/java/com/android/server/tv/UinputBridge.java b/services/core/java/com/android/server/tv/UinputBridge.java
index f91033281ef8..1a984f98051f 100644
--- a/services/core/java/com/android/server/tv/UinputBridge.java
+++ b/services/core/java/com/android/server/tv/UinputBridge.java
@@ -63,7 +63,7 @@ public final class UinputBridge {
@Override
protected void finalize() throws Throwable {
try {
- if (mPtr != 0) {
+ if (mCloseGuard != null) {
mCloseGuard.warnIfOpen();
}
close(mToken);
diff --git a/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb/externalmanagementtest/UsbDeviceStateController.java b/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb/externalmanagementtest/UsbDeviceStateController.java
index 1cb394e4d2ab..42f7955bee98 100644
--- a/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb/externalmanagementtest/UsbDeviceStateController.java
+++ b/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb/externalmanagementtest/UsbDeviceStateController.java
@@ -89,7 +89,10 @@ public class UsbDeviceStateController {
@Override
protected void finalize() throws Throwable {
try {
- mCloseGuard.warnIfOpen();
+ if (mCloseGuard != null) {
+ mCloseGuard.warnIfOpen();
+ }
+
release();
} finally {
super.finalize();
diff --git a/wifi/java/android/net/wifi/aware/DiscoverySession.java b/wifi/java/android/net/wifi/aware/DiscoverySession.java
index 82b3792a331c..31f01bd12baf 100644
--- a/wifi/java/android/net/wifi/aware/DiscoverySession.java
+++ b/wifi/java/android/net/wifi/aware/DiscoverySession.java
@@ -128,8 +128,11 @@ public class DiscoverySession {
@Override
protected void finalize() throws Throwable {
try {
- if (!mTerminated) {
+ if (mCloseGuard != null) {
mCloseGuard.warnIfOpen();
+ }
+
+ if (!mTerminated) {
destroy();
}
} finally {
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareSession.java b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
index 895defb9a540..443db0c6a805 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareSession.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareSession.java
@@ -82,8 +82,11 @@ public class WifiAwareSession {
@Override
protected void finalize() throws Throwable {
try {
- if (!mTerminated) {
+ if (mCloseGuard != null) {
mCloseGuard.warnIfOpen();
+ }
+
+ if (!mTerminated) {
destroy();
}
} finally {