Fix #129: Memory leak when setOptions() fails while accepting a new connection.

This commit is contained in:
Trustin Lee 2011-12-15 16:39:10 +09:00
parent c6ef712503
commit 414b18e704
3 changed files with 34 additions and 5 deletions

View File

@ -211,7 +211,15 @@ public class ClientBootstrap extends Bootstrap {
// Set the options.
Channel ch = getFactory().newChannel(pipeline);
ch.getConfig().setOptions(getOptions());
boolean success = false;
try {
ch.getConfig().setOptions(getOptions());
success = true;
} finally {
if (!success) {
ch.close();
}
}
// Bind.
if (localAddress != null) {

View File

@ -185,8 +185,16 @@ public class ConnectionlessBootstrap extends Bootstrap {
Channel ch = getFactory().newChannel(pipeline);
// Apply options.
ch.getConfig().setPipelineFactory(getPipelineFactory());
ch.getConfig().setOptions(getOptions());
boolean success = false;
try {
ch.getConfig().setPipelineFactory(getPipelineFactory());
ch.getConfig().setOptions(getOptions());
success = true;
} finally {
if (!success) {
ch.close();
}
}
// Bind
ChannelFuture future = ch.bind(localAddress);
@ -290,7 +298,16 @@ public class ConnectionlessBootstrap extends Bootstrap {
// Set the options.
Channel ch = getFactory().newChannel(pipeline);
ch.getConfig().setOptions(getOptions());
boolean success = false;
try {
ch.getConfig().setPipelineFactory(getPipelineFactory());
ch.getConfig().setOptions(getOptions());
success = true;
} finally {
if (!success) {
ch.close();
}
}
// Bind.
if (localAddress != null) {

View File

@ -349,7 +349,11 @@ public class ServerBootstrap extends Bootstrap {
ChannelHandlerContext ctx,
ChildChannelStateEvent e) throws Exception {
// Apply child options.
e.getChildChannel().getConfig().setOptions(childOptions);
try {
e.getChildChannel().getConfig().setOptions(childOptions);
} catch (Throwable t) {
Channels.fireExceptionCaught(e.getChildChannel(), t);
}
ctx.sendUpstream(e);
}