Skip to content

Commit d80d17b

Browse files
committed
Observable.from(empty) tests hasNext on subscribe so can emit onCompleted even if request is 0
1 parent d020a50 commit d80d17b

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

src/main/java/rx/internal/operators/OnSubscribeFromIterable.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,11 @@ private IterableProducer(Subscriber<? super T> o, Iterator<? extends T> it) {
6565

6666
@Override
6767
public void request(long n) {
68-
if (REQUESTED_UPDATER.get(this) == Long.MAX_VALUE) {
68+
if (requested == Long.MAX_VALUE) {
6969
// already started with fast-path
7070
return;
7171
}
72-
if (n == Long.MAX_VALUE) {
73-
REQUESTED_UPDATER.set(this, n);
72+
if (n == Long.MAX_VALUE && REQUESTED_UPDATER.compareAndSet(this, 0, Long.MAX_VALUE)) {
7473
// fast-path without backpressure
7574
while (it.hasNext()) {
7675
if (o.isUnsubscribed()) {
@@ -81,7 +80,7 @@ public void request(long n) {
8180
if (!o.isUnsubscribed()) {
8281
o.onCompleted();
8382
}
84-
} else if(n > 0) {
83+
} else if (n > 0) {
8584
// backpressure is requested
8685
long _c = BackpressureUtils.getAndAddRequest(REQUESTED_UPDATER, this, n);
8786
if (_c == 0) {

src/test/java/rx/internal/operators/OnSubscribeFromIterableTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@ public Iterator<String> iterator() {
7575

7676
@Override
7777
public boolean hasNext() {
78-
return i++ < 3;
78+
return i < 3;
7979
}
8080

8181
@Override
8282
public String next() {
83-
return String.valueOf(i);
83+
return String.valueOf(++i);
8484
}
8585

8686
@Override

0 commit comments

Comments
 (0)