Merge "Ensure that debug builds crash again if there is a BinderProxy leak." am: db122f90d9
am: 4fc1bb0e37
Change-Id: I949a3896f7613fe8bd3d92badba0fea5b3343e39
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index 249c60a..1b707bd 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -765,6 +765,8 @@
private static final int LOG_MAIN_INDEX_SIZE = 8;
private static final int MAIN_INDEX_SIZE = 1 << LOG_MAIN_INDEX_SIZE;
private static final int MAIN_INDEX_MASK = MAIN_INDEX_SIZE - 1;
+ // Debuggable builds will throw an AssertionError if the number of map entries exceeds:
+ private static final int CRASH_AT_SIZE = 5_000;
/**
* We next warn when we exceed this bucket size.
@@ -886,9 +888,14 @@
keyArray[size] = key;
}
if (size >= mWarnBucketSize) {
+ final int total_size = size();
Log.v(Binder.TAG, "BinderProxy map growth! bucket size = " + size
- + " total = " + size());
+ + " total = " + total_size);
mWarnBucketSize += WARN_INCREMENT;
+ if (Build.IS_DEBUGGABLE && total_size > CRASH_AT_SIZE) {
+ throw new AssertionError("Binder ProxyMap has too many entries. "
+ + "BinderProxy leak?");
+ }
}
}