final void decodeRemovalReentryProtection(ChannelHandlerContext ctx, ByteBuf in, List<Object> out)
            throws Exception {
        decodeState = STATE_CALLING_CHILD_DECODE;
        try {
            decode(ctx, in, out);
        } finally {
            boolean removePending = decodeState == STATE_HANDLER_REMOVED_PENDING;
            decodeState = STATE_INIT;
            if (removePending) {
                handlerRemoved(ctx);
            }
        }
    }
final void decodeRemovalReentryProtection ( ChannelHandlerContext ctx , ByteBuf in , List < Object > out ) throws Exception { decodeState = STATE_CALLING_CHILD_DECODE ; try { decode ( ctx , in , out ) ; } finally { boolean removePending = decodeState == STATE_HANDLER_REMOVED_PENDING ; decodeState = STATE_INIT ; if ( removePending ) { handlerRemoved ( ctx ) ; } } }
Decode the from one {@link ByteBuf} to an other. This method will be called till either the input
{@link ByteBuf} has nothing to read when return from this method or till nothing was read from the input
{@link ByteBuf}.

@param ctx           the {@link ChannelHandlerContext} which this {@link ByteToMessageDecoder} belongs to
@param in            the {@link ByteBuf} from which to read data
@param out           the {@link List} to which decoded messages should be added
@throws Exception    is thrown if an error occurs