Author: clebert.suconic(a)jboss.com
Date: 2010-11-01 20:38:52 -0400 (Mon, 01 Nov 2010)
New Revision: 9830
Modified:
branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java
Log:
tweak
Modified:
branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java
===================================================================
---
branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java 2010-11-02
00:24:34 UTC (rev 9829)
+++
branches/Branch_New_Paging/src/main/org/hornetq/core/paging/cursor/impl/PageSubscriptionImpl.java 2010-11-02
00:38:52 UTC (rev 9830)
@@ -160,6 +160,10 @@
LinkedListIterator<PagePosition> redeliveryIterator =
redeliveries.iterator();
boolean isredelivery = false;
+
+ /** next element taken on hasNext test.
+ * it has to be delivered on next next operation */
+ Pair<PagePosition, PagedMessage> cachedNext;
public void repeat()
{
@@ -185,6 +189,13 @@
*/
public Pair<PagePosition, PagedMessage> next()
{
+
+ if (cachedNext != null)
+ {
+ Pair<PagePosition, PagedMessage> retPos = cachedNext;
+ cachedNext = null;
+ return retPos;
+ }
try
{
if (redeliveryIterator.hasNext())
@@ -212,7 +223,15 @@
public boolean hasNext()
{
- return true;
+ // if an unbehaved program called hasNext twice before next, we only cache it
once.
+ if (cachedNext != null)
+ {
+ return true;
+ }
+
+ cachedNext = next();
+
+ return cachedNext != null;
}
/* (non-Javadoc)