Author: toad
Date: 2005-11-25 15:48:52 +0000 (Fri, 25 Nov 2005)
New Revision: 7597
Modified:
trunk/freenet/src/freenet/node/KeyTracker.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/support/LimitedRangeIntByteArrayMap.java
Log:
216:
Fix packet throttle, hopefully.
Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java 2005-11-25 15:13:48 UTC
(rev 7596)
+++ trunk/freenet/src/freenet/node/KeyTracker.java 2005-11-25 15:48:52 UTC
(rev 7597)
@@ -6,6 +6,7 @@
import freenet.crypt.BlockCipher;
import freenet.io.comm.NotConnectedException;
+import freenet.io.xfer.PacketThrottle;
import freenet.support.DoublyLinkedList;
import freenet.support.DoublyLinkedListImpl;
import freenet.support.IndexableUpdatableSortedLinkedListItem;
@@ -457,7 +458,13 @@
}
Logger.minor(this, "Removed ack request");
callbacks[i] = sentPacketsContents.getCallbacks(realSeqNo);
- sentPacketsContents.remove(realSeqNo);
+ byte[] buf = sentPacketsContents.get(realSeqNo);
+ if(sentPacketsContents.remove(realSeqNo)) {
+ if(buf.length > Node.PACKET_SIZE) {
+ PacketThrottle throttle = getThrottle();
+ throttle.notifyOfPacketAcknowledged();
+ }
+ }
}
int cbCount = 0;
for(int i=0;i<callbacks.length;i++) {
@@ -473,7 +480,11 @@
Logger.minor(this, "Executed "+cbCount+" callbacks");
}
- /**
+ private PacketThrottle getThrottle() {
+ return PacketThrottle.getThrottle(pn.getPeer(), Node.PACKET_SIZE);
+ }
+
+ /**
* Called when we have received a packet acknowledgement.
* @param realSeqNo
*/
@@ -487,7 +498,13 @@
}
Logger.minor(this, "Removed ack request");
callbacks = sentPacketsContents.getCallbacks(realSeqNo);
- sentPacketsContents.remove(realSeqNo);
+ byte[] buf = sentPacketsContents.get(realSeqNo);
+ if(sentPacketsContents.remove(realSeqNo)) {
+ if(buf.length > Node.PACKET_SIZE) {
+ PacketThrottle throttle = getThrottle();
+ throttle.notifyOfPacketAcknowledged();
+ }
+ }
if(callbacks != null) {
for(int i=0;i<callbacks.length;i++)
callbacks[i].acknowledged();
@@ -511,6 +528,8 @@
public void resendPacket(int seqNumber) {
byte[] resendData = sentPacketsContents.get(seqNumber);
if(resendData != null) {
+ if(resendData.length > Node.PACKET_SIZE)
+ getThrottle().notifyOfPacketLost();
synchronized(packetsToResend) {
packetsToResend.add(new Integer(seqNumber));
}
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-25 15:13:48 UTC (rev
7596)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-25 15:48:52 UTC (rev
7597)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 215;
+ public static final int buildNumber = 216;
/** Oldest build of Fred we will talk to */
- public static final int lastGoodBuild = 215;
+ public static final int lastGoodBuild = 216;
/** The highest reported build of fred */
public static int highestSeenBuild = buildNumber;
Modified: trunk/freenet/src/freenet/support/LimitedRangeIntByteArrayMap.java
===================================================================
--- trunk/freenet/src/freenet/support/LimitedRangeIntByteArrayMap.java
2005-11-25 15:13:48 UTC (rev 7596)
+++ trunk/freenet/src/freenet/support/LimitedRangeIntByteArrayMap.java
2005-11-25 15:48:52 UTC (rev 7597)
@@ -127,14 +127,17 @@
throw new WouldBlockException();
}
- public synchronized void remove(int index) {
+ /**
+ * @return true if we removed something.
+ */
+ public synchronized boolean remove(int index) {
Logger.minor(this, "Removing "+index+" - min="+minValue+"
max="+maxValue);
if(contents.remove(new Integer(index)) != null) {
- if(index > minValue && index < maxValue) return;
+ if(index > minValue && index < maxValue) return true;
if(contents.size() == 0) {
minValue = maxValue = -1;
notifyAll();
- return;
+ return true;
}
if(index == maxValue) {
for(int i=maxValue;i>=minValue;i--) {
@@ -142,7 +145,7 @@
if(contents.containsKey(ii)) {
maxValue = i;
notifyAll();
- return;
+ return true;
}
}
// Still here - WTF?
@@ -155,7 +158,7 @@
if(contents.containsKey(ii)) {
minValue = i;
notifyAll();
- return;
+ return true;
}
}
// Still here - WTF?
@@ -165,6 +168,7 @@
notifyAll();
throw new IllegalStateException("impossible");
}
+ return false;
}
/**