ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/SubmissionPublisherTest.java
(Generate patch)

Comparing jsr166/src/test/tck/SubmissionPublisherTest.java (file contents):
Revision 1.23 by dl, Sun Nov 26 21:37:56 2017 UTC vs.
Revision 1.24 by jsr166, Mon Nov 27 01:19:51 2017 UTC

# Line 6 | Line 6
6   */
7  
8   import java.util.concurrent.CompletableFuture;
9 + import java.util.concurrent.CountDownLatch;
10   import java.util.concurrent.Executor;
11   import java.util.concurrent.Executors;
12   import java.util.concurrent.Flow;
# Line 978 | Line 979 | public class SubmissionPublisherTest ext
979          assertTrue(count.get() < n);
980      }
981  
982 +    /**
983 +     * Tests scenario for
984 +     * JDK-8187947: A race condition in SubmissionPublisher
985 +     * 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
986 +     */
987 +    public void testMissedSignal_8187947() throws Exception {
988 +        final int N = expensiveTests ? (1 << 20) : (1 << 10);
989 +        final CountDownLatch finished = new CountDownLatch(1);
990 +        final SubmissionPublisher<Boolean> pub = new SubmissionPublisher<>();
991 +        class Sub implements Subscriber<Boolean> {
992 +            int received;
993 +            public void onSubscribe(Subscription s) {
994 +                s.request(N);
995 +            }
996 +            public void onNext(Boolean item) {
997 +                if (++received == N)
998 +                    finished.countDown();
999 +                else
1000 +                    CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE));
1001 +            }
1002 +            public void onError(Throwable t) { throw new AssertionError(t); }
1003 +            public void onComplete() {}
1004 +        }
1005 +        pub.subscribe(new Sub());
1006 +        CompletableFuture.runAsync(() -> pub.submit(Boolean.TRUE));
1007 +        await(finished);
1008 +    }
1009   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines