コード例 #1
0
  private void callAfterAdd(ChannelHandlerContext ctx) {
    try {
      ctx.handler().afterAdd(ctx);
    } catch (Throwable t) {
      boolean removed = false;
      try {
        remove((DefaultChannelHandlerContext) ctx, false);
        removed = true;
      } catch (Throwable t2) {
        if (logger.isWarnEnabled()) {
          logger.warn("Failed to remove a handler: " + ctx.name(), t2);
        }
      }

      if (removed) {
        throw new ChannelPipelineException(
            ctx.handler().getClass().getName() + ".afterAdd() has thrown an exception; removed.",
            t);
      } else {
        throw new ChannelPipelineException(
            ctx.handler().getClass().getName()
                + ".afterAdd() has thrown an exception; also failed to remove.",
            t);
      }
    }
  }