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

Commit 36bcdb53 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Fix memory leaks in the accessibility layer.

The AccessibilityServiceConnection chache should be shared
between all interrogating threads.

bug:5664337

Change-Id: I151041d0b358e87ac47ea5c1c258f90a8b252420
parent d8ec8db5
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -91,7 +91,8 @@ public final class AccessibilityInteractionClient

    private final Rect mTempBounds = new Rect();

    private final SparseArray<IAccessibilityServiceConnection> mConnectionCache =
    // The connection cache is shared between all interrogating threads.
    private static final SparseArray<IAccessibilityServiceConnection> sConnectionCache =
        new SparseArray<IAccessibilityServiceConnection>();

    /**
@@ -517,8 +518,8 @@ public final class AccessibilityInteractionClient
     * @return The cached connection if such.
     */
    public IAccessibilityServiceConnection getConnection(int connectionId) {
        synchronized (mConnectionCache) {
            return mConnectionCache.get(connectionId);
        synchronized (sConnectionCache) {
            return sConnectionCache.get(connectionId);
        }
    }

@@ -529,8 +530,8 @@ public final class AccessibilityInteractionClient
     * @param connection The connection.
     */
    public void addConnection(int connectionId, IAccessibilityServiceConnection connection) {
        synchronized (mConnectionCache) {
            mConnectionCache.put(connectionId, connection);
        synchronized (sConnectionCache) {
            sConnectionCache.put(connectionId, connection);
        }
    }

@@ -540,8 +541,8 @@ public final class AccessibilityInteractionClient
     * @param connectionId The connection id.
     */
    public void removeConnection(int connectionId) {
        synchronized (mConnectionCache) {
            mConnectionCache.remove(connectionId);
        synchronized (sConnectionCache) {
            sConnectionCache.remove(connectionId);
        }
    }
}