[muscle] [patch] Java client might drop partial muscle messages
- From: Lior Okman <lior.okman@xxxxxxxxxxxxxxxxxx>
- To: jaf@xxxxxxxxxxxx
- Date: Mon, 07 May 2007 19:18:53 +0300
Hi Jeremy
Attached is a patch that fixes a situation where the Java client might
sometimes drop partially received messages.
If this happens, the muscle client will probably also disconnect
immediately afterwards.
Lior
diff -Nur com/lcs/muscle/client/MessageTransceiver.java
com/lcs/muscle/client/MessageTransceiver.java
--- com/lcs/muscle/client/MessageTransceiver.java 2007-02-02
23:14:40.000000000 +0200
+++ com/lcs/muscle/client/MessageTransceiver.java 2007-03-20
12:31:11.000000000 +0200
@@ -345,6 +345,7 @@
buffer.mark();
sendReply(_gateway.unflattenMessage(buffer));
}
+ buffer.compact();
}
catch (NotEnoughDataException ned)
{
@@ -362,8 +363,6 @@
ByteBuffer tmp = ByteBuffer.allocate(desiredSize);
tmp.order(ByteOrder.LITTLE_ENDIAN);
tmp.put(buffer);
- tmp.limit(tmp.position());
- tmp.rewind();
buffer = tmp;
}
else {
@@ -371,8 +370,12 @@
throw new UnflattenFormatException("Incoming
message too large: "+(buffer.capacity() +
ned.getNumMissingBytes())+"/"+maxIncomingMessageSize);
}
}
+ else {
+ int newPosition = eodPosition - buffer.position();
+ buffer.compact();
+ buffer.position(newPosition);
+ }
}
- buffer.compact();
}
}
catch(Exception ex) {
Other related posts: