Skip to content

Commit 6bbd921

Browse files
committed
Fix related classes for issue #1451
1 parent 53b4659 commit 6bbd921

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

rxjava-core/src/main/java/rx/internal/operators/OnSubscribeFromIterable.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ public void request(long n) {
7070
}
7171
o.onNext(it.next());
7272
}
73-
o.onCompleted();
73+
if (!o.isUnsubscribed()) {
74+
o.onCompleted();
75+
}
7476
} else if(n > 0) {
7577
// backpressure is requested
7678
long _c = REQUESTED_UPDATER.getAndAdd(this, n);

rxjava-core/src/main/java/rx/internal/operators/OnSubscribeRange.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ public void request(long n) {
6464
}
6565
o.onNext((int) i);
6666
}
67-
o.onCompleted();
67+
if (!o.isUnsubscribed()) {
68+
o.onCompleted();
69+
}
6870
} else if (n > 0) {
6971
// backpressure is requested
7072
long _c = REQUESTED_UPDATER.getAndAdd(this, n);

rxjava-core/src/main/java/rx/internal/operators/OperatorDoOnEach.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,24 @@ public void onCompleted() {
4747
onError(e);
4848
return;
4949
}
50-
observer.onCompleted();
5150
// Set `done` here so that the error in `doOnEachObserver.onCompleted()` can be noticed by observer
5251
done = true;
52+
observer.onCompleted();
5353
}
5454

5555
@Override
5656
public void onError(Throwable e) {
5757
if (done) {
5858
return;
5959
}
60+
done = true;
6061
try {
6162
doOnEachObserver.onError(e);
6263
} catch (Throwable e2) {
6364
observer.onError(e2);
6465
return;
6566
}
6667
observer.onError(e);
67-
done = true;
6868
}
6969

7070
@Override

rxjava-core/src/main/java/rx/internal/operators/OperatorTakeWhile.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,40 @@ public Subscriber<? super T> call(final Subscriber<? super T> subscriber) {
4949

5050
private int counter = 0;
5151

52+
private boolean done = false;
53+
5254
@Override
5355
public void onNext(T args) {
5456
boolean isSelected;
5557
try {
5658
isSelected = predicate.call(args, counter++);
5759
} catch (Throwable e) {
60+
done = true;
5861
subscriber.onError(e);
5962
unsubscribe();
6063
return;
6164
}
6265
if (isSelected) {
6366
subscriber.onNext(args);
6467
} else {
68+
done = true;
6569
subscriber.onCompleted();
6670
unsubscribe();
6771
}
6872
}
6973

7074
@Override
7175
public void onCompleted() {
72-
subscriber.onCompleted();
76+
if (!done) {
77+
subscriber.onCompleted();
78+
}
7379
}
7480

7581
@Override
7682
public void onError(Throwable e) {
77-
subscriber.onError(e);
83+
if (!done) {
84+
subscriber.onError(e);
85+
}
7886
}
7987

8088
};

0 commit comments

Comments
 (0)