--- a/jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Fri Jan 15 15:36:54 2010 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Mon Jan 18 14:01:07 2010 +0000
@@ -869,8 +869,8 @@
public HandlerResult handleNotification(
AssociationChangeNotification not, T unused) {
if (not.event().equals(
- AssociationChangeNotification.AssocChangeEvent.COMM_UP)) {
- assert association == null;
+ AssociationChangeNotification.AssocChangeEvent.COMM_UP) &&
+ association == null) {
SctpAssocChange sac = (SctpAssocChange) not;
association = new SctpAssociationImpl
(sac.assocId(), sac.maxInStreams(), sac.maxOutStreams());
@@ -982,17 +982,17 @@
SocketAddress target = messageInfo.address();
boolean unordered = messageInfo.isUnordered();
int ppid = messageInfo.payloadProtocolID();
- int pos = src.position();
- int lim = src.limit();
-
- assert (pos <= lim && streamNumber >= 0);
- int rem = (pos <= lim ? lim - pos : 0);
if (src instanceof DirectBuffer)
- return sendFromNativeBuffer(fd, src, rem, pos, target, streamNumber,
+ return sendFromNativeBuffer(fd, src, target, streamNumber,
unordered, ppid);
/* Substitute a native buffer */
+ int pos = src.position();
+ int lim = src.limit();
+ assert (pos <= lim && streamNumber >= 0);
+
+ int rem = (pos <= lim ? lim - pos : 0);
ByteBuffer bb = Util.getTemporaryDirectBuffer(rem);
try {
bb.put(src);
@@ -1000,7 +1000,7 @@
/* Do not update src until we see how many bytes were written */
src.position(pos);
- int n = sendFromNativeBuffer(fd, bb, rem, pos, target, streamNumber,
+ int n = sendFromNativeBuffer(fd, bb, target, streamNumber,
unordered, ppid);
if (n > 0) {
/* now update src */
@@ -1014,13 +1014,16 @@
private int sendFromNativeBuffer(int fd,
ByteBuffer bb,
- int rem,
- int pos,
SocketAddress target,
int streamNumber,
boolean unordered,
int ppid)
throws IOException {
+ int pos = bb.position();
+ int lim = bb.limit();
+ assert (pos <= lim);
+ int rem = (pos <= lim ? lim - pos : 0);
+
int written = send0(fd, ((DirectBuffer)bb).address() + pos,
rem, target, -1 /*121*/, streamNumber, unordered, ppid);
if (written > 0)