13
13
package io .reactivex .internal .operators .observable ;
14
14
15
15
import java .util .concurrent .Callable ;
16
- import java .util .concurrent .atomic .AtomicInteger ;
16
+ import java .util .concurrent .atomic .* ;
17
17
18
18
import io .reactivex .*;
19
19
import io .reactivex .disposables .Disposable ;
@@ -59,9 +59,8 @@ static final class SourceObserver<T, U> extends AtomicInteger implements Observe
59
59
60
60
private static final long serialVersionUID = 8828587559905699186L ;
61
61
final Observer <? super U > actual ;
62
- final SequentialDisposable sa ;
63
62
final Function <? super T , ? extends ObservableSource <? extends U >> mapper ;
64
- final Observer <U > inner ;
63
+ final InnerObserver <U > inner ;
65
64
final int bufferSize ;
66
65
67
66
SimpleQueue <T > queue ;
@@ -82,7 +81,6 @@ static final class SourceObserver<T, U> extends AtomicInteger implements Observe
82
81
this .mapper = mapper ;
83
82
this .bufferSize = bufferSize ;
84
83
this .inner = new InnerObserver <U >(actual , this );
85
- this .sa = new SequentialDisposable ();
86
84
}
87
85
@ Override
88
86
public void onSubscribe (Disposable s ) {
@@ -161,18 +159,14 @@ public boolean isDisposed() {
161
159
@ Override
162
160
public void dispose () {
163
161
disposed = true ;
164
- sa .dispose ();
162
+ inner .dispose ();
165
163
s .dispose ();
166
164
167
165
if (getAndIncrement () == 0 ) {
168
166
queue .clear ();
169
167
}
170
168
}
171
169
172
- void innerSubscribe (Disposable s ) {
173
- sa .update (s );
174
- }
175
-
176
170
void drain () {
177
171
if (getAndIncrement () != 0 ) {
178
172
return ;
@@ -231,7 +225,10 @@ void drain() {
231
225
}
232
226
}
233
227
234
- static final class InnerObserver <U > implements Observer <U > {
228
+ static final class InnerObserver <U > extends AtomicReference <Disposable > implements Observer <U > {
229
+
230
+ private static final long serialVersionUID = -7449079488798789337L ;
231
+
235
232
final Observer <? super U > actual ;
236
233
final SourceObserver <?, ?> parent ;
237
234
@@ -242,7 +239,7 @@ static final class InnerObserver<U> implements Observer<U> {
242
239
243
240
@ Override
244
241
public void onSubscribe (Disposable s ) {
245
- parent . innerSubscribe ( s );
242
+ DisposableHelper . set ( this , s );
246
243
}
247
244
248
245
@ Override
@@ -258,6 +255,10 @@ public void onError(Throwable t) {
258
255
public void onComplete () {
259
256
parent .innerComplete ();
260
257
}
258
+
259
+ void dispose () {
260
+ DisposableHelper .dispose (this );
261
+ }
261
262
}
262
263
}
263
264
@@ -278,8 +279,6 @@ static final class ConcatMapDelayErrorObserver<T, R>
278
279
279
280
final DelayErrorInnerObserver <R > observer ;
280
281
281
- final SequentialDisposable arbiter ;
282
-
283
282
final boolean tillTheEnd ;
284
283
285
284
SimpleQueue <T > queue ;
@@ -303,7 +302,6 @@ static final class ConcatMapDelayErrorObserver<T, R>
303
302
this .tillTheEnd = tillTheEnd ;
304
303
this .error = new AtomicThrowable ();
305
304
this .observer = new DelayErrorInnerObserver <R >(actual , this );
306
- this .arbiter = new SequentialDisposable ();
307
305
}
308
306
309
307
@ Override
@@ -375,7 +373,7 @@ public boolean isDisposed() {
375
373
public void dispose () {
376
374
cancelled = true ;
377
375
d .dispose ();
378
- arbiter .dispose ();
376
+ observer .dispose ();
379
377
}
380
378
381
379
@ SuppressWarnings ("unchecked" )
@@ -479,7 +477,9 @@ void drain() {
479
477
}
480
478
}
481
479
482
- static final class DelayErrorInnerObserver <R > implements Observer <R > {
480
+ static final class DelayErrorInnerObserver <R > extends AtomicReference <Disposable > implements Observer <R > {
481
+
482
+ private static final long serialVersionUID = 2620149119579502636L ;
483
483
484
484
final Observer <? super R > actual ;
485
485
@@ -492,7 +492,7 @@ static final class DelayErrorInnerObserver<R> implements Observer<R> {
492
492
493
493
@ Override
494
494
public void onSubscribe (Disposable d ) {
495
- parent . arbiter . replace (d );
495
+ DisposableHelper . replace (this , d );
496
496
}
497
497
498
498
@ Override
@@ -520,6 +520,10 @@ public void onComplete() {
520
520
p .active = false ;
521
521
p .drain ();
522
522
}
523
+
524
+ void dispose () {
525
+ DisposableHelper .dispose (this );
526
+ }
523
527
}
524
528
}
525
529
}
0 commit comments