File tree Expand file tree Collapse file tree 2 files changed +31
-0
lines changed
main/java/rx/internal/operators
test/java/rx/internal/operators Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -70,6 +70,8 @@ void emit(long previousRequested) {
70
70
if (previousRequested == 0 ) {
71
71
try {
72
72
for (Object value : deque ) {
73
+ if (subscriber .isUnsubscribed ())
74
+ return ;
73
75
notification .accept (subscriber , value );
74
76
}
75
77
} catch (Throwable e ) {
Original file line number Diff line number Diff line change 24
24
import static org .mockito .Mockito .verify ;
25
25
26
26
import java .util .Arrays ;
27
+ import java .util .concurrent .atomic .AtomicInteger ;
27
28
28
29
import org .junit .Test ;
29
30
import org .mockito .InOrder ;
@@ -264,4 +265,32 @@ public void onNext(Integer integer) {
264
265
}
265
266
});
266
267
}
268
+
269
+ @ Test
270
+ public void testUnsubscribeTakesEffectEarlyOnFastPath () {
271
+ final AtomicInteger count = new AtomicInteger ();
272
+ Observable .range (0 , 100000 ).takeLast (100000 ).subscribe (new Subscriber <Integer >() {
273
+
274
+ @ Override
275
+ public void onStart () {
276
+ request (Long .MAX_VALUE );
277
+ }
278
+
279
+ @ Override
280
+ public void onCompleted () {
281
+
282
+ }
283
+
284
+ @ Override
285
+ public void onError (Throwable e ) {
286
+ }
287
+
288
+ @ Override
289
+ public void onNext (Integer integer ) {
290
+ count .incrementAndGet ();
291
+ unsubscribe ();
292
+ }
293
+ });
294
+ assertEquals (1 ,count .get ());
295
+ }
267
296
}
You can’t perform that action at this time.
0 commit comments