Refactor MpscLinkedQueue.poll · ReactiveX/RxJava@b8582b9 (original) (raw)
File tree
1 file changed
lines changed
- src/main/java/io/reactivex/rxjava3/internal/queue
1 file changed
lines changed
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -87,23 +87,19 @@ public boolean offer(final T e) { | ||
87 | 87 | public T poll() { |
88 | 88 | LinkedQueueNode<T> currConsumerNode = lpConsumerNode(); // don't load twice, it's alright |
89 | 89 | LinkedQueueNode<T> nextNode = currConsumerNode.lvNext(); |
90 | -if (nextNode != null) { | |
91 | -// we have to null out the value because we are going to hang on to the node | |
92 | -final T nextValue = nextNode.getAndNullValue(); | |
93 | -spConsumerNode(nextNode); | |
94 | -return nextValue; | |
90 | +final T nextValue; | |
91 | +if (nextNode == null && currConsumerNode == lvProducerNode()) { | |
92 | +return null; | |
95 | 93 | } |
96 | -else if (currConsumerNode != lvProducerNode()) { | |
94 | +if (nextNode == null) { | |
97 | 95 | // spin, we are no longer wait free |
98 | 96 | while ((nextNode = currConsumerNode.lvNext()) == null) { } // NOPMD |
99 | 97 | // got the next node... |
100 | - | |
101 | -// we have to null out the value because we are going to hang on to the node | |
102 | -final T nextValue = nextNode.getAndNullValue(); | |
103 | -spConsumerNode(nextNode); | |
104 | -return nextValue; | |
105 | 98 | } |
106 | -return null; | |
99 | +// we have to null out the value because we are going to hang on to the node | |
100 | +nextValue = nextNode.getAndNullValue(); | |
101 | +spConsumerNode(nextNode); | |
102 | +return nextValue; | |
107 | 103 | } |
108 | 104 | |
109 | 105 | @Override |