@@ -200,7 +200,7 @@ public void onError(Throwable t) {
200
200
inner .cancel ();
201
201
202
202
if (getAndIncrement () == 0 ) {
203
- downstream . onError ( errors .terminate () );
203
+ errors .tryTerminateConsumer ( downstream );
204
204
}
205
205
} else {
206
206
RxJavaPlugins .onError (t );
@@ -214,7 +214,7 @@ public void innerNext(R value) {
214
214
if (compareAndSet (1 , 0 )) {
215
215
return ;
216
216
}
217
- downstream . onError ( errors .terminate () );
217
+ errors .tryTerminateConsumer ( downstream );
218
218
}
219
219
}
220
220
@@ -224,7 +224,7 @@ public void innerError(Throwable e) {
224
224
upstream .cancel ();
225
225
226
226
if (getAndIncrement () == 0 ) {
227
- downstream . onError ( errors .terminate () );
227
+ errors .tryTerminateConsumer ( downstream );
228
228
}
229
229
} else {
230
230
RxJavaPlugins .onError (e );
@@ -243,6 +243,8 @@ public void cancel() {
243
243
244
244
inner .cancel ();
245
245
upstream .cancel ();
246
+
247
+ errors .tryTerminateAndReport ();
246
248
}
247
249
}
248
250
@@ -265,7 +267,7 @@ void drain() {
265
267
Exceptions .throwIfFatal (e );
266
268
upstream .cancel ();
267
269
errors .addThrowable (e );
268
- downstream . onError ( errors .terminate () );
270
+ errors .tryTerminateConsumer ( downstream );
269
271
return ;
270
272
}
271
273
@@ -286,7 +288,7 @@ void drain() {
286
288
287
289
upstream .cancel ();
288
290
errors .addThrowable (e );
289
- downstream . onError ( errors .terminate () );
291
+ errors .tryTerminateConsumer ( downstream );
290
292
return ;
291
293
}
292
294
@@ -312,7 +314,7 @@ void drain() {
312
314
Exceptions .throwIfFatal (e );
313
315
upstream .cancel ();
314
316
errors .addThrowable (e );
315
- downstream . onError ( errors .terminate () );
317
+ errors .tryTerminateConsumer ( downstream );
316
318
return ;
317
319
}
318
320
@@ -324,7 +326,7 @@ void drain() {
324
326
if (get () == 0 && compareAndSet (0 , 1 )) {
325
327
downstream .onNext (vr );
326
328
if (!compareAndSet (1 , 0 )) {
327
- downstream . onError ( errors .terminate () );
329
+ errors .tryTerminateConsumer ( downstream );
328
330
return ;
329
331
}
330
332
}
@@ -437,6 +439,8 @@ public void cancel() {
437
439
438
440
inner .cancel ();
439
441
upstream .cancel ();
442
+
443
+ errors .tryTerminateAndReport ();
440
444
}
441
445
}
442
446
@@ -456,7 +460,7 @@ void drain() {
456
460
if (d && !veryEnd ) {
457
461
Throwable ex = errors .get ();
458
462
if (ex != null ) {
459
- downstream . onError ( errors .terminate () );
463
+ errors .tryTerminateConsumer ( downstream );
460
464
return ;
461
465
}
462
466
}
@@ -468,20 +472,18 @@ void drain() {
468
472
} catch (Throwable e ) {
469
473
Exceptions .throwIfFatal (e );
470
474
upstream .cancel ();
471
- errors .addThrowable (e );
472
- downstream .onError (errors .terminate ());
475
+ if (errors .addThrowable (e )) {
476
+ errors .tryTerminateConsumer (downstream );
477
+ } else {
478
+ RxJavaPlugins .onError (e );
479
+ }
473
480
return ;
474
481
}
475
482
476
483
boolean empty = v == null ;
477
484
478
485
if (d && empty ) {
479
- Throwable ex = errors .terminate ();
480
- if (ex != null ) {
481
- downstream .onError (ex );
482
- } else {
483
- downstream .onComplete ();
484
- }
486
+ errors .tryTerminateConsumer (downstream );
485
487
return ;
486
488
}
487
489
@@ -495,7 +497,7 @@ void drain() {
495
497
496
498
upstream .cancel ();
497
499
errors .addThrowable (e );
498
- downstream . onError ( errors .terminate () );
500
+ errors .tryTerminateConsumer ( downstream );
499
501
return ;
500
502
}
501
503
@@ -522,7 +524,7 @@ void drain() {
522
524
errors .addThrowable (e );
523
525
if (!veryEnd ) {
524
526
upstream .cancel ();
525
- downstream . onError ( errors .terminate () );
527
+ errors .tryTerminateConsumer ( downstream );
526
528
return ;
527
529
}
528
530
vr = null ;
0 commit comments