+ }
+
+ private void write(final ByteBuf buf, final ChannelPromise promise) {
+ if (writePending) {
+ LOG.trace("A write is already pending, delaying write");
+ delayWrite(buf, promise);
+ } else {
+ LOG.trace("Issuing immediate write");
+ startWrite(buf, promise);
+ }
+ }
+
+ private void delayWrite(final ByteBuf buf, final ChannelPromise promise) {
+ if (pending == null) {
+ // these are per-session, hence we want to start out small
+ pending = new ArrayDeque<>(1);
+ }
+ pending.addLast(new Write(buf, promise));
+ }