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

Commit 0b7ba90b authored by Martijn Coenen's avatar Martijn Coenen Committed by Android (Google) Code Review
Browse files

Merge "Throw BinderProxyMapSizeException when hitting limits."

parents 28e0ef79 d4f9da07
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -53,6 +53,12 @@ public final class BinderProxy implements IBinder {

    private static volatile Binder.ProxyTransactListener sTransactListener = null;

    private static class BinderProxyMapSizeException extends AssertionError {
        BinderProxyMapSizeException(String s) {
            super(s);
        }
    };

    /**
     * @see {@link Binder#setProxyTransactListener(listener)}.
     */
@@ -73,7 +79,10 @@ public 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:
        /**
         * Debuggable builds will throw an BinderProxyMapSizeException if the number of
         * map entries exceeds:
         */
        private static final int CRASH_AT_SIZE = 20_000;

        /**
@@ -228,7 +237,8 @@ public final class BinderProxy implements IBinder {
                        dumpProxyInterfaceCounts();
                        dumpPerUidProxyCounts();
                        Runtime.getRuntime().gc();
                        throw new AssertionError("Binder ProxyMap has too many entries: "
                        throw new BinderProxyMapSizeException(
                                "Binder ProxyMap has too many entries: "
                                + totalSize + " (total), " + totalUnclearedSize + " (uncleared), "
                                + unclearedSize() + " (uncleared after GC). BinderProxy leak?");
                    } else if (totalSize > 3 * totalUnclearedSize / 2) {