Author: toad
Date: 2008-03-04 17:16:14 +0000 (Tue, 04 Mar 2008)
New Revision: 18353

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
Fix another cause of forceGrab(negative), and maybe of worse things: we weren't 
resetting alreadyReportedBytes after sending a packet.
Logging: Detect when forceGrab(negative) is going to happen a bit earlier and 
log more info.

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-03-04 
17:09:13 UTC (rev 18352)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-03-04 
17:16:14 UTC (rev 18353)
@@ -1659,7 +1659,12 @@
                sock.sendPacket(data, replyTo, pn == null ? 
crypto.config.alwaysAllowLocalAddresses() : pn.allowLocalAddresses());
                if(pn != null)
                        pn.reportOutgoingPacket(data, 0, data.length, 
System.currentTimeMillis());
-               node.outputThrottle.forceGrab(data.length - 
alreadyReportedBytes);
+               int reportableBytes = data.length - alreadyReportedBytes;
+               if(reportableBytes < 0) {
+                       Logger.error(this, "alreadyReportedBytes 
("+alreadyReportedBytes+")> data.length ("+data.length+")");
+                       reportableBytes = 0;
+               }
+               node.outputThrottle.forceGrab(reportableBytes);
        }

        /**
@@ -2124,6 +2129,7 @@
                                                try {
                                                        // FIXME regenerate 
callbacks and priority!
                                                        
innerProcessOutgoing(messageData, lastIndex, i-lastIndex, length, pn, 
neverWaitForPacketNumber, callbacks, alreadyReportedBytes, priority);
+                                                       alreadyReportedBytes = 
0;
                                                        for(int 
j=lastIndex;j<i;j++) {
                                                                MessageItem mi 
= newMsgs[j];
                                                                mi_name = 
(mi.msg == null ? "(not a Message)" : mi.msg.getSpec().getName());


Reply via email to