From 6eabd343c4251880f4e0c3a17ff6dc98d3309658 Mon Sep 17 00:00:00 2001 From: Jestan Nirojan Date: Mon, 20 Feb 2012 01:39:42 +0530 Subject: [PATCH 1/2] SCTP association shutdown cleanup --- .../channel/sctp/SctpNotificationHandler.java | 2 +- .../java/io/netty/channel/sctp/SctpWorker.java | 18 ++---------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java index 83f5e53910..345041149e 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java @@ -59,7 +59,7 @@ class SctpNotificationHandler extends AbstractNotificationHandler { @Override public HandlerResult handleNotification(ShutdownNotification notification, Object o) { - Channels.fireChannelDisconnected(sctpChannel); + sctpChannel.worker.close(sctpChannel, Channels.succeededFuture(sctpChannel)); return HandlerResult.RETURN; } diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java index a7878d77ba..5dc6f5820a 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java @@ -307,26 +307,12 @@ class SctpWorker implements Runnable { final int predictedRecvBufSize = predictor.nextReceiveBufferSize(); boolean messageReceived = false; - boolean failure = true; MessageInfo messageInfo = null; ByteBuffer bb = recvBufferPool.acquire(predictedRecvBufSize); try { messageInfo = channel.channel.receive(bb, null, notificationHandler); - if (messageInfo != null) { - messageReceived = true; - if (!messageInfo.isUnordered()) { - failure = false; - } else { - if (logger.isErrorEnabled()) { - logger.error("Received unordered SCTP Packet"); - } - failure = true; - } - } else { - messageReceived = false; - failure = false; - } + messageReceived = messageInfo != null; } catch (ClosedChannelException e) { // Can happen, and does not need a user attention. } catch (Throwable t) { @@ -356,7 +342,7 @@ class SctpWorker implements Runnable { recvBufferPool.release(bb); } - if (channel.channel.isBlocking() && !messageReceived || failure) { + if (channel.channel.isBlocking() && !messageReceived) { k.cancel(); // Some JDK implementations run into an infinite loop without this. close(channel, succeededFuture(channel)); return false; From 5bbabb6ddafde152dbadb01f3c89b2b98f56b3bd Mon Sep 17 00:00:00 2001 From: Jestan Nirojan Date: Sat, 3 Mar 2012 11:45:50 +0530 Subject: [PATCH 2/2] fixed written bytes count in sctp send buffer pool --- .../main/java/io/netty/channel/sctp/SctpSendBufferPool.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java index 382e5b4fc4..bbb3f07b35 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java @@ -199,8 +199,7 @@ final class SctpSendBufferPool { final MessageInfo messageInfo = MessageInfo.createOutgoing(ch.association(), null, streamNo); messageInfo.payloadProtocolID(protocolId); messageInfo.streamNumber(streamNo); - ch.send(buffer, messageInfo); - return writtenBytes(); + return ch.send(buffer, messageInfo); } @Override @@ -245,8 +244,7 @@ final class SctpSendBufferPool { final MessageInfo messageInfo = MessageInfo.createOutgoing(ch.association(), null, streamNo); messageInfo.payloadProtocolID(protocolId); messageInfo.streamNumber(streamNo); - ch.send(buffer, messageInfo); - return writtenBytes(); + return ch.send(buffer, messageInfo); } @Override