protected final void invokeNextStage(O zuulMesg) {
        if (nextStage != null) {
            try (TaskCloseable ignored =
                    PerfMark.traceTask(this, s -> s.getClass().getSimpleName() + ".invokeNextStage")) {
                addPerfMarkTags(zuulMesg);
                nextStage.filter(zuulMesg);
            }
        } else {
            // Next stage is Netty channel handler
            try (TaskCloseable ignored =
                    PerfMark.traceTask(this, s -> s.getClass().getSimpleName() + ".fireChannelRead")) {
                addPerfMarkTags(zuulMesg);
                ChannelHandlerContext channelHandlerContext = getChannelHandlerContext(zuulMesg);
                if (!channelHandlerContext.channel().isActive()) {
                    zuulMesg.getContext().cancel();
                    zuulMesg.disposeBufferedBody();
                    SpectatorUtils.newCounter(
                                    "zuul.filterChain.message.hanging",
                                    zuulMesg.getClass().getSimpleName())
                            .increment();
                } else {
                    channelHandlerContext.fireChannelRead(zuulMesg);
                }
            }
        }
    }
Subclasses of this class are supposed to be thread safe

Created by saroskar on 5/18/17.
zuul-core/src/main/java/com/netflix/zuul/netty/filter/BaseZuulFilterRunner.java