diff --git a/src/main/java/io/reactivex/subjects/UnicastSubject.java b/src/main/java/io/reactivex/subjects/UnicastSubject.java index 1b14fd364d..5a194c4ee5 100644 --- a/src/main/java/io/reactivex/subjects/UnicastSubject.java +++ b/src/main/java/io/reactivex/subjects/UnicastSubject.java @@ -167,8 +167,9 @@ public State(int capacityHint, Runnable onCancelled) { @Override public void subscribe(Subscriber s) { if (once == 0 && ONCE.compareAndSet(this, 0, 1)) { - SUBSCRIBER.lazySet(this, s); s.onSubscribe(this); + SUBSCRIBER.lazySet(this, s); // full barrier in drain + drain(); } else { if (done) { Throwable e = error; diff --git a/src/main/java/io/reactivex/subjects/nbp/NbpUnicastSubject.java b/src/main/java/io/reactivex/subjects/nbp/NbpUnicastSubject.java index ae29966819..e0f77b107e 100644 --- a/src/main/java/io/reactivex/subjects/nbp/NbpUnicastSubject.java +++ b/src/main/java/io/reactivex/subjects/nbp/NbpUnicastSubject.java @@ -144,8 +144,8 @@ public State(int capacityHint, Runnable onCancelled) { @Override public void accept(NbpSubscriber s) { if (once == 0 && ONCE.compareAndSet(this, 0, 1)) { - SUBSCRIBER.lazySet(this, s); s.onSubscribe(this); + SUBSCRIBER.lazySet(this, s); // full barrier in drain drain(); } else { s.onSubscribe(EmptyDisposable.INSTANCE);