[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: