Skip to content

Commit fcfa4e8

Browse files
committed
ensure this does not escape from ObserveOnSubscriber constructor by moving code to an init() method and calling after construction
1 parent f6ca9ee commit fcfa4e8

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ public Subscriber<? super T> call(Subscriber<? super T> child) {
6161
// avoid overhead, execute directly
6262
return child;
6363
} else {
64-
return new ObserveOnSubscriber<T>(scheduler, child);
64+
ObserveOnSubscriber<T> parent = new ObserveOnSubscriber<T>(scheduler, child);
65+
parent.init();
66+
return parent;
6567
}
6668
}
6769

@@ -98,6 +100,11 @@ public ObserveOnSubscriber(Scheduler scheduler, Subscriber<? super T> child) {
98100
queue = new SynchronizedQueue<Object>(RxRingBuffer.SIZE);
99101
}
100102
this.scheduledUnsubscribe = new ScheduledUnsubscribe(recursiveScheduler);
103+
}
104+
105+
void init() {
106+
// don't want this code in the constructor because `this` can escape through the
107+
// setProducer call
101108
child.add(scheduledUnsubscribe);
102109
child.setProducer(new Producer() {
103110

0 commit comments

Comments
 (0)