From 89689b44739cb92ff65917b6391cac6fdffe4cc7 Mon Sep 17 00:00:00 2001
From: Nikita <abracham.mitchell@gmail.com>
Date: Tue, 23 May 2017 11:59:48 +0300
Subject: [PATCH] Yet another infinite scan fix. #885

---
 .../org/redisson/RedissonBaseIterator.java    | 28 +++++++++++--------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/redisson/src/main/java/org/redisson/RedissonBaseIterator.java b/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
index bccbd0f32..9faa1d2b2 100644
--- a/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
+++ b/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
@@ -26,6 +26,12 @@ import org.redisson.client.protocol.decoder.ScanObjectEntry;
 
 import io.netty.buffer.ByteBuf;
 
+/**
+ * 
+ * @author Nikita Koksharov
+ *
+ * @param <V> value type
+ */
 abstract class RedissonBaseIterator<V> implements Iterator<V> {
 
     private List<ByteBuf> firstValues;
@@ -112,19 +118,17 @@ abstract class RedissonBaseIterator<V> implements Iterator<V> {
                         }
                         finished = true;
                         return false;
-                    } else if (!firstValues.isEmpty()) {
-                        if (res.getPos() == 0) {
-                            if (tryAgain()) {
-                                client = null;
-                                firstValues = null;
-                                nextIterPos = 0;
-                                prevIterPos = -1;
-                                continue;
-                            }
-                            
-                            finished = true;
-                            return false;
+                    } else if (lastValues.isEmpty() && res.getPos() == 0) {
+                        if (tryAgain()) {
+                            client = null;
+                            firstValues = null;
+                            nextIterPos = 0;
+                            prevIterPos = -1;
+                            continue;
                         }
+                        
+                        finished = true;
+                        return false;
                     }
                 }
                 lastIter = res.getValues().iterator();