in src/main/java/com/twitter/whiskey/futures/ReactiveFuture.java [208:230]
public boolean hasNext() {
if ((drained != null && drained.hasNext()) || (currentElement != null && currentElement != SENTINEL)) {
return true;
}
if (isDone() && queue.isEmpty()) return false;
synchronized(ReactiveFuture.this) {
if (isDone() && queue.isEmpty()) return false;
}
try {
currentElement = queue.take();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
if (currentElement != SENTINEL) return true;
if (error != null) throw new RuntimeException(error);
return false;
}