private boolean tryAdvanceSource() {
            boolean canAdvanceSource = buffering; // volatile-read (stored in local variable to limit R/W operations)
            if (!canAdvanceSource) // check again after having synchronized
                return false;

            do {
                canAdvanceSource = source.tryAdvance(buffer::add);
            } while (canAdvanceSource && !canAdvanceThisAtOnce());

            // volatile-write (causes grown buffer and shrunk source to be visible to all threads upon next volatile-read)
            buffering = canAdvanceSource;
            return true;
        }
Buffers (i.e. advances the <code>source</code>) until an item at <code>nextIndex</code>
is added to the <code>buffer</code>, or until the <code>source</code> is exhausted.

Guarded by: <code>buffer</code>
jOOL-java-8/src/main/java/org/jooq/lambda/SeqBuffer.java