Add some last-ditch debugging to help track down the logcat leak
Change-Id: Ifabb07b0dc8b73cd3e802d984868c84b620ea851
diff --git a/src/com/android/tradefed/device/TestDevice.java b/src/com/android/tradefed/device/TestDevice.java
index 9d374bb..e84d932 100644
--- a/src/com/android/tradefed/device/TestDevice.java
+++ b/src/com/android/tradefed/device/TestDevice.java
@@ -1334,6 +1334,33 @@
getSerialNumber()));
}
}
+
+ /**
+ * Override finalize to determine when a LogcatReceiver is being destroyed without having
+ * been cleaned up. This is temporary as we try to hunt down file leaks.
+ */
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ String name = String.format("%s[%s]", LOG_TAG, getSerialNumber());
+ Log.d(LOG_TAG, String.format("%s in finalizer", name));
+ if (!mIsCancelled) {
+ Log.e(LOG_TAG, String.format("%s was not cancelled!", name));
+ cancel();
+ }
+ if (mIsCancelled && (mTmpFile != null || mPreviousTmpFile != null)) {
+ Log.e(LOG_TAG, String.format("%s was cancelled, but tmpfile(%s) or " +
+ "prevtmpfile(%s) wasn't closed!", mTmpFile, mPreviousTmpFile));
+ if (mTmpFile != null) {
+ mTmpFile.delete();
+ mTmpFile = null;
+ }
+ if (mPreviousTmpFile != null) {
+ mPreviousTmpFile.delete();
+ mPreviousTmpFile = null;
+ }
+ }
+ }
}
/**