Ensure that debug builds crash again if there is a BinderProxy leak.
This fails when trying to run the AOSP mailer with CRASH_AT_SIZE = 500, when the check interval is reduced sufficiently so that the test is actually executed. System server has been observed to use more than 1000 BinderProxies. Thus 5000 seems like roughly the lowest safe limit. Note that the test is executed somewhat rarely, so we may exceed this number by quite a few before we actually crash. Bug: 65760710 Test: Builds, AOSP boots & works for a few tasks. Fails as expected with reduced limit. Change-Id: I1c999b85e1ba1bd1d166a9ffba4f0b3992ffee45
This commit is contained in:
@@ -767,6 +767,8 @@ final class BinderProxy implements IBinder {
|
||||
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.
|
||||
@@ -888,9 +890,14 @@ final class BinderProxy implements IBinder {
|
||||
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?");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user