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

Commit cad7af2d authored by Shashwat Razdan's avatar Shashwat Razdan
Browse files

Returning the evicted element from CircularQueue.

Calling destroy() on the returned element in CloudSearchPerUserService

Bug: 228848922
Test: Added new CTS test
Change-Id: Iebbcb44f5bfdbc5085c202ceb39301c83ca3c6cf
parent 60376531
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -147,7 +147,10 @@ public class CloudSearchPerUserService extends
                }
            });
            if (sessionInfo.linkToDeath()) {
                mCallbackQueue.put(requestId, sessionInfo);
                CloudSearchCallbackInfo removedInfo = mCallbackQueue.put(requestId, sessionInfo);
                if (removedInfo != null) {
                    removedInfo.destroy();
                }
            } else {
                // destroy the session if calling process is already dead
                onDestroyLocked(requestId);
+8 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server;

import android.annotation.Nullable;
import android.util.ArrayMap;

import java.util.Collection;
@@ -43,16 +44,19 @@ public class CircularQueue<K, V> extends LinkedList<K> {
    /**
     * Put a (key|value) pair in the CircularQueue. Only the key will be added to the queue. Value
     * will be added to the ArrayMap.
     * @return {@code true} (as specified by {@link Collection#add})
     * @return the most recently removed value if keys were removed, or {@code null} if no keys were
     * removed.
     */
    public boolean put(K key, V value) {
    @Nullable
    public V put(K key, V value) {
        super.add(key);
        mArrayMap.put(key, value);
        V removedValue = null;
        while (size() > mLimit) {
            K removedKey = super.remove();
            mArrayMap.remove(removedKey);
            removedValue = mArrayMap.remove(removedKey);
        }
        return true;
        return removedValue;
    }

    /**
+3 −2
Original line number Diff line number Diff line
@@ -43,11 +43,12 @@ public class CircularQueueTest {
        mQueue = new CircularQueue<>(LIMIT);
        mQueue.put(1, "A");
        mQueue.put(2, "B");
        mQueue.put(3, "C");
        String removedElement = mQueue.put(3, "C");
        assertNull(mQueue.getElement(1));
        assertEquals(mQueue.getElement(2), "B");
        assertEquals(mQueue.getElement(3), "C");

        // Confirming that put is returning the deleted element
        assertEquals(removedElement, "A");
    }

    @Test