Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c79595fe authored by Hans Boehm's avatar Hans Boehm
Browse files

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
parent 8f380ab2
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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?");
                }
            }
        }