code: private void processHeadersEnd(ChannelHandlerContext ctx, Http2Stream stream, FullHttpMessage msg,
                                     boolean endOfStream) {
          if (endOfStream) {
              // Release if the msg from the map is different from the object being forwarded up the pipeline.
              fireChannelRead(ctx, msg, getMessage(stream) != msg, stream);
          } else {
              putMessage(stream, msg);
          }
      }
docs: After HTTP/2 headers have been processed by {@link #processHeadersBegin} this method either
  sends the result up the pipeline or retains the message for future processing.
  
  @param ctx The context for which this message has been received
  @param stream The stream the {@code objAccumulator} corresponds to
  @param msg The object which represents all headers/data for corresponding to {@code stream}
  @param endOfStream {@code true} if this is the last event for the stream