File tree Expand file tree Collapse file tree 4 files changed +18
-6
lines changed
rxjava-core/src/main/java/rx/internal/operators Expand file tree Collapse file tree 4 files changed +18
-6
lines changed Original file line number Diff line number Diff 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 );
Original file line number Diff line number Diff 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 );
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 };
You can’t perform that action at this time.
0 commit comments