diff --git a/src/main/java/rx/internal/operators/OperatorMerge.java b/src/main/java/rx/internal/operators/OperatorMerge.java index b1f03f9451..f270b08eac 100644 --- a/src/main/java/rx/internal/operators/OperatorMerge.java +++ b/src/main/java/rx/internal/operators/OperatorMerge.java @@ -307,7 +307,9 @@ private boolean drainQueuesIfNeeded() { } finally { boolean moreToDrain = releaseEmitLock(); // request outside of lock - request(emitted); + if (emitted > 0) { + request(emitted); + } if (!moreToDrain) { return true; } @@ -524,6 +526,7 @@ private static final class InnerSubscriber extends Subscriber { final MergeSubscriber parentSubscriber; final MergeProducer producer; /** Make sure the inner termination events are delivered only once. */ + @SuppressWarnings("unused") volatile int terminated; @SuppressWarnings("rawtypes") static final AtomicIntegerFieldUpdater ONCE_TERMINATED = AtomicIntegerFieldUpdater.newUpdater(InnerSubscriber.class, "terminated");