Merge "Returning the evicted element from CircularQueue. Calling destroy() on the returned element in CloudSearchPerUserService" into tm-dev

This commit is contained in:
Shashwat Razdan
2022-05-17 19:09:54 +00:00
committed by Android (Google) Code Review
3 changed files with 15 additions and 7 deletions

View File

@@ -147,7 +147,10 @@ public class CloudSearchPerUserService extends
} }
}); });
if (sessionInfo.linkToDeath()) { if (sessionInfo.linkToDeath()) {
mCallbackQueue.put(requestId, sessionInfo); CloudSearchCallbackInfo removedInfo = mCallbackQueue.put(requestId, sessionInfo);
if (removedInfo != null) {
removedInfo.destroy();
}
} else { } else {
// destroy the session if calling process is already dead // destroy the session if calling process is already dead
onDestroyLocked(requestId); onDestroyLocked(requestId);

View File

@@ -16,6 +16,7 @@
package com.android.server; package com.android.server;
import android.annotation.Nullable;
import android.util.ArrayMap; import android.util.ArrayMap;
import java.util.Collection; 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 * Put a (key|value) pair in the CircularQueue. Only the key will be added to the queue. Value
* will be added to the ArrayMap. * 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); super.add(key);
mArrayMap.put(key, value); mArrayMap.put(key, value);
V removedValue = null;
while (size() > mLimit) { while (size() > mLimit) {
K removedKey = super.remove(); K removedKey = super.remove();
mArrayMap.remove(removedKey); removedValue = mArrayMap.remove(removedKey);
} }
return true; return removedValue;
} }
/** /**

View File

@@ -43,11 +43,12 @@ public class CircularQueueTest {
mQueue = new CircularQueue<>(LIMIT); mQueue = new CircularQueue<>(LIMIT);
mQueue.put(1, "A"); mQueue.put(1, "A");
mQueue.put(2, "B"); mQueue.put(2, "B");
mQueue.put(3, "C"); String removedElement = mQueue.put(3, "C");
assertNull(mQueue.getElement(1)); assertNull(mQueue.getElement(1));
assertEquals(mQueue.getElement(2), "B"); assertEquals(mQueue.getElement(2), "B");
assertEquals(mQueue.getElement(3), "C"); assertEquals(mQueue.getElement(3), "C");
// Confirming that put is returning the deleted element
assertEquals(removedElement, "A");
} }
@Test @Test