Fix NoSuchElementException raised by ChannelInitializer

This commit is contained in:
Trustin Lee 2013-12-07 00:39:21 +09:00
parent 5b68996f5a
commit 3c453f5dba

View File

@ -60,22 +60,19 @@ public abstract class ChannelInitializer<C extends Channel> extends ChannelHandl
*/ */
protected abstract void initChannel(C ch) throws Exception; protected abstract void initChannel(C ch) throws Exception;
@SuppressWarnings("unchecked")
@Override @Override
public final void channelRegistered(ChannelHandlerContext ctx) @SuppressWarnings("unchecked")
throws Exception { public final void channelRegistered(ChannelHandlerContext ctx) throws Exception {
boolean removed = false;
boolean success = false; boolean success = false;
try { try {
initChannel((C) ctx.channel()); initChannel((C) ctx.channel());
ctx.pipeline().remove(this); ctx.pipeline().remove(this);
removed = true;
ctx.fireChannelRegistered(); ctx.fireChannelRegistered();
success = true; success = true;
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Failed to initialize a channel. Closing: " + ctx.channel(), t); logger.warn("Failed to initialize a channel. Closing: " + ctx.channel(), t);
} finally { } finally {
if (!removed) { if (!ctx.isRemoved()) {
ctx.pipeline().remove(this); ctx.pipeline().remove(this);
} }
if (!success) { if (!success) {