Merge "Returning the evicted element from CircularQueue. Calling destroy() on the returned element in CloudSearchPerUserService" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
dafb69ab23
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user