/** * Synchronously trigger {@link Flow.Subscriber#onComplete()}. */ void complete() { try { reentrantLock.lock(); completed = true; if (singleSubscriber != null && queue.isEmpty()) { LOGGER.finest("Completing by the producing thread."); singleSubscriber.onComplete(); singleSubscriber = null; } else { LOGGER.finest("Not completing by the producing thread."); } } finally { reentrantLock.unlock(); referenceQueue.release(); } }
} else if (completed && queue.isEmpty()) { LOGGER.finest("Completing from request."); singleSubscriber.onComplete(); } else if (queue.isEmpty()) { long released = n == Long.MAX_VALUE ? Long.MAX_VALUE : release;
/** * Synchronously trigger {@link Flow.Subscriber#onComplete()}. */ void complete() { try { reentrantLock.lock(); completed = true; if (singleSubscriber != null && queue.isEmpty()) { LOGGER.finest("Completing by the producing thread."); singleSubscriber.onComplete(); singleSubscriber = null; } else { LOGGER.finest("Not completing by the producing thread."); } } finally { reentrantLock.unlock(); referenceQueue.release(); } }
} else if (completed && queue.isEmpty()) { LOGGER.finest("Completing from request."); singleSubscriber.onComplete(); } else if (queue.isEmpty()) { long released = n == Long.MAX_VALUE ? Long.MAX_VALUE : release;
@Override public void onComplete() { subscriber.onComplete(); }
@Override public void onComplete() { subscriber.onComplete(); }
@Override public void onComplete() { delegate.onComplete(); }
@Override public void onComplete() { delegate.onComplete(); } }
private void complete() { subscriber.close(sub -> { synchronized (invocationLock) { sub.onComplete(); } }); }
@Override public void onComplete() { delegate.onComplete(); } }
private void complete() { subscriber.close(sub -> { synchronized (invocationLock) { sub.onComplete(); } }); }
@Override public void onComplete() { delegate.onComplete(); } }
@Override public void onComplete() { subscriber.onComplete(); }
@Override public void onComplete() { subscriber.onComplete(); }
@Override public void onComplete() { delegate.onComplete(); }
@Override public void onComplete() { delegate.onComplete(); } }
@Override public void onComplete() { delegate.onComplete(); } }
@Override public void onComplete() { delegate.onComplete(); } }
private void complete() { subscriber.close(sub -> { synchronized (invocationLock) { sub.onComplete(); } }); }
private void complete() { subscriber.close(sub -> { synchronized (invocationLock) { sub.onComplete(); } }); }