Search in sources :

Example 1 with Subscription

use of java8.util.concurrent.Flow.Subscription in project streamsupport by stefan-zobel.

the class SubmissionPublisherTest method testMissedSignal_8187947.

/**
 * Tests scenario for
 * JDK-8187947: A race condition in SubmissionPublisher
 * cvs update -D '2017-11-25' src/main/java/util/concurrent/SubmissionPublisher.java && ant -Djsr166.expensiveTests=true -Djsr166.tckTestClass=SubmissionPublisherTest -Djsr166.methodFilter=testMissedSignal tck; cvs update -A src/main/java/util/concurrent/SubmissionPublisher.java
 */
public void testMissedSignal_8187947() throws Exception {
    final int N = expensiveTests ? (1 << 20) : (1 << 10);
    final CountDownLatch finished = new CountDownLatch(1);
    final SubmissionPublisher<Boolean> pub = new SubmissionPublisher<>();
    class Sub implements Subscriber<Boolean> {

        int received;

        public void onSubscribe(Subscription s) {
            s.request(N);
        }

        public void onNext(Boolean item) {
            if (++received == N)
                finished.countDown();
            else
                CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE));
        }

        public void onError(Throwable t) {
            throw new AssertionError(t);
        }

        public void onComplete() {
        }
    }
    pub.subscribe(new Sub());
    CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE));
    await(finished);
}
Also used : SubmissionPublisher(java8.util.concurrent.SubmissionPublisher) Subscriber(java8.util.concurrent.Flow.Subscriber) CountDownLatch(java.util.concurrent.CountDownLatch) Subscription(java8.util.concurrent.Flow.Subscription)

Aggregations

CountDownLatch (java.util.concurrent.CountDownLatch)1 Subscriber (java8.util.concurrent.Flow.Subscriber)1 Subscription (java8.util.concurrent.Flow.Subscription)1 SubmissionPublisher (java8.util.concurrent.SubmissionPublisher)1