void advance() {
      // Geode changes BEGIN
      if (currentListIndex < currentList.size()) {
        nextEntry = currentList.get(currentListIndex++);
        return;
      }

      nextEntry = null;
      if (nextTableIndex >= 0) {
        final Segment<K, V> seg =
            segments[currentSegmentIndex];
        final ReentrantReadWriteLock.ReadLock listLock = seg.listUpdateLock.readLock();
        listLock.lock();
        try {
          do {
            if ((nextEntry = currentTable[nextTableIndex--]) != null) {
              copyEntriesToList();
              return;
            }
          } while (nextTableIndex >= 0);
        } finally {
          listLock.unlock();
        }
      }
      /*
       * (original code) if (this.nextEntry != null && (this.nextEntry =
       * this.nextEntry.getNextEntry()) != null) { return; }
       *
       * while (this.nextTableIndex >= 0) { if ((this.nextEntry =
       * this.currentTable[this.nextTableIndex--]) != null) { return; } }
       */
      // Geode changes END

      while (currentSegmentIndex > 0) {
        final Segment<K, V> seg =
            segments[--currentSegmentIndex];
        if (seg.count != 0) {
          currentTable = seg.table;
          final ReentrantReadWriteLock.ReadLock listLock = seg.listUpdateLock.readLock();
          listLock.lock();
          try {
            for (int j = currentTable.length - 1; j >= 0; --j) {
              if ((nextEntry = currentTable[j]) != null) {
                nextTableIndex = j - 1;
                copyEntriesToList();
                return;
              }
            }
          } finally {
            listLock.unlock();
          }
        }
      }
    }
Returns an enumeration of the values in this table.

@return an enumeration of the values in this table
@see #values()
geode-core/src/main/java/org/apache/geode/internal/util/concurrent/CustomEntryConcurrentHashMap.java