Returning the evicted element from CircularQueue.
Calling destroy() on the returned element in CloudSearchPerUserService Bug: 228848922 Test: Added new CTS test Change-Id: Iebbcb44f5bfdbc5085c202ceb39301c83ca3c6cf
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user