private void request0(long n) {
        if (obj2 == null) {
            return;
        }

        if (n <= 0) {
            onError(new IllegalArgumentException(
                    "n: " + n + " (expected: > 0, see Reactive Streams specification rule 3.9)"));
            return;
        }

        if (inOnNext) {
            // Do not let Subscriber.onNext() reenter, because it can lead to weird-looking event ordering
            // for a Subscriber implemented like the following:
            //
            //   public void onNext(Object e) {
            //       subscription.request(1);
            //       ... Handle 'e' ...
            //   }
            //
            // Note that we do not call this method again, because we are already in the notification loop
            // and it will consume the element we've just added in addObjectOrEvent() from the queue as
            // expected.
            //
            // We do not need to worry about synchronizing the access to 'inOnNext' because the subscriber
            // methods must be on the same thread, or synchronized, according to Reactive Streams spec.
            requested = true;
            return;
        }

        if (n >= 2) {
            // All elements will be consumed. No need to restore inOnNext
            inOnNext = true;
            if (obj1 != null) {
                final T item = obj1;
                obj1 = null;
                onNext(item);
            }

            if (obj2 != null) {
                final T item = obj2;
                obj2 = null;
                onNext(item);
                onComplete();
            }
        } else {
            if (obj1 != null) {
                final T item = obj1;
                obj1 = null;
                inOnNext = true;
                onNext(item);
                inOnNext = false;
                n--;
            }

            if ((n > 0 || requested) && obj2 != null) {
                final T item = obj2;
                obj2 = null;
                onNext(item);
                onComplete();
            }
        }
    }
Constructs a new {@link TwoElementFixedStreamMessage} for the given objects.
core/src/main/java/com/linecorp/armeria/internal/common/stream/TwoElementFixedStreamMessage.java