Skip to content

Commit cac7430

Browse files
committed
1.x: fix filter() default-requesting and thus going unbounded (#3912)
1 parent 992d745 commit cac7430

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ static final class FilterSubscriber<T> extends Subscriber<T> {
5353
public FilterSubscriber(Subscriber<? super T> actual, Func1<? super T, Boolean> predicate) {
5454
this.actual = actual;
5555
this.predicate = predicate;
56+
request(0);
5657
}
5758

5859
@Override

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import rx.*;
2727
import rx.exceptions.*;
2828
import rx.functions.*;
29-
import rx.internal.util.RxRingBuffer;
29+
import rx.internal.util.*;
3030
import rx.observers.TestSubscriber;
3131
import rx.subjects.PublishSubject;
3232

@@ -69,7 +69,7 @@ public Boolean call(String t1) {
6969
});
7070

7171
final CountDownLatch latch = new CountDownLatch(1);
72-
TestSubscriber<String> ts = new TestSubscriber<String>() {
72+
TestSubscriber<String> ts = new TestSubscriber<String>(0L) {
7373

7474
@Override
7575
public void onCompleted() {
@@ -116,7 +116,7 @@ public Boolean call(Integer t1) {
116116
});
117117

118118
final CountDownLatch latch = new CountDownLatch(1);
119-
final TestSubscriber<Integer> ts = new TestSubscriber<Integer>() {
119+
final TestSubscriber<Integer> ts = new TestSubscriber<Integer>(0L) {
120120

121121
@Override
122122
public void onCompleted() {
@@ -194,4 +194,18 @@ public Boolean call(Integer v) {
194194
ts.assertError(TestException.class);
195195
}
196196

197+
@Test
198+
public void doesntRequestOnItsOwn() {
199+
TestSubscriber<Integer> ts = TestSubscriber.create(0L);
200+
201+
Observable.range(1, 10).filter(UtilityFunctions.alwaysTrue()).unsafeSubscribe(ts);
202+
203+
ts.assertNoValues();
204+
205+
ts.requestMore(10);
206+
207+
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
208+
ts.assertNoErrors();
209+
ts.assertCompleted();
210+
}
197211
}

0 commit comments

Comments
 (0)