Loading core/java/android/os/MessageStack.java +14 −7 Original line number Diff line number Diff line Loading @@ -129,8 +129,9 @@ public final class MessageStack { /** * Iterates through messages and creates a reverse-ordered chain of messages to remove. * @return true if any messages were removed, false otherwise */ public void updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what, public boolean updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what, Object object, Runnable r, long when) { Message current = (Message) sTop.getAcquire(this); Message prev = null; Loading @@ -150,12 +151,18 @@ public final class MessageStack { current = current.next; } if (firstRemoved != null) { Message freelist; do { freelist = mFreelistHeadValue; firstRemoved.nextFree = freelist; // prev points to the last to-be-removed message that was processed. } while (!sFreelistHead.compareAndSet(this, freelist, prev)); return true; } return false; } /** Loading core/tests/coretests/src/android/os/MessageStackTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ public final class MessageStackTest { Handler h = new Handler(Looper.getMainLooper()); int removeWhat = 1; int keepWhat = 2; int neverPushedWhat = 3; // Interleave to-remove and to-keep messages. for (int i = 0; i < 5; i++) { Loading @@ -112,8 +113,12 @@ public final class MessageStackTest { stack.pushMessage(Message.obtain(h, keepWhat)); } stack.heapSweep(); stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, removeWhat, null, null, 0); assertTrue(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, removeWhat, null, null, 0)); // Try deleting a message we never pushed assertFalse(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, neverPushedWhat, null, null, 0)); assertEquals(5, stack.freelistSizeForTest()); stack.drainFreelist(); Loading Loading
core/java/android/os/MessageStack.java +14 −7 Original line number Diff line number Diff line Loading @@ -129,8 +129,9 @@ public final class MessageStack { /** * Iterates through messages and creates a reverse-ordered chain of messages to remove. * @return true if any messages were removed, false otherwise */ public void updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what, public boolean updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what, Object object, Runnable r, long when) { Message current = (Message) sTop.getAcquire(this); Message prev = null; Loading @@ -150,12 +151,18 @@ public final class MessageStack { current = current.next; } if (firstRemoved != null) { Message freelist; do { freelist = mFreelistHeadValue; firstRemoved.nextFree = freelist; // prev points to the last to-be-removed message that was processed. } while (!sFreelistHead.compareAndSet(this, freelist, prev)); return true; } return false; } /** Loading
core/tests/coretests/src/android/os/MessageStackTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ public final class MessageStackTest { Handler h = new Handler(Looper.getMainLooper()); int removeWhat = 1; int keepWhat = 2; int neverPushedWhat = 3; // Interleave to-remove and to-keep messages. for (int i = 0; i < 5; i++) { Loading @@ -112,8 +113,12 @@ public final class MessageStackTest { stack.pushMessage(Message.obtain(h, keepWhat)); } stack.heapSweep(); stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, removeWhat, null, null, 0); assertTrue(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, removeWhat, null, null, 0)); // Try deleting a message we never pushed assertFalse(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(), h, neverPushedWhat, null, null, 0)); assertEquals(5, stack.freelistSizeForTest()); stack.drainFreelist(); Loading