Author: toad
Date: 2005-11-30 22:08:47 +0000 (Wed, 30 Nov 2005)
New Revision: 7642
Modified:
trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
trunk/freenet/src/freenet/node/Version.java
Log:
254: (mandatory)
Block transmitter was cancelling transfers unnecessarily.
It's not that we haven't heard from the other end for 30 seconds that means the
other side is dead.
It's having not heard from the other side for 30 seconds *after we sent the
last packet*.
Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2005-11-30
21:42:38 UTC (rev 7641)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2005-11-30
22:08:47 UTC (rev 7642)
@@ -50,6 +50,7 @@
BitArray _sentPackets;
boolean failedByOverload = false;
final PacketThrottle throttle;
+ long timeAllSent = -1;
// Static stuff for global bandwidth limiter
/** Synchronization object for bandwidth limiting */
@@ -114,13 +115,24 @@
while (true) {
synchronized(_unsent) {
if(_unsent.size() != 0) break;
+ // No
unsent packets
+
if(getNumSent() == _prb.getNumPackets()) {
+
timeAllSent = System.currentTimeMillis();
+ }
}
if(_sendComplete) return;
synchronized
(_senderThread) {
_senderThread.wait(10*1000);
}
}
- } catch (InterruptedException
e) { }
+ } catch (InterruptedException
e) {
+ } catch (AbortedException e) {
+
synchronized(_senderThread) {
+ _sendComplete =
true;
+
_senderThread.notifyAll();
+ }
+ return;
+ }
long startDelayTime =
System.currentTimeMillis();
delay(startCycleTime);
int packetNo;
@@ -284,14 +296,15 @@
}
if(_sendComplete || !_destination.isConnected()) return
false;
if (msg == null) {
- if (getNumSent() == _prb.getNumPackets()) {
+ if(timeAllSent > 0 &&
System.currentTimeMillis() - timeAllSent > SEND_TIMEOUT &&
+ getNumSent() ==
_prb.getNumPackets()) {
synchronized(_senderThread) {
_sendComplete = true;
_senderThread.notifyAll();
}
Logger.error(this, "Terminating send
"+_uid+" to "+_destination+" from "+_usm.getPortNumber()+" as we haven't heard
from receiver in "+SEND_TIMEOUT+"ms.");
return false;
- }
+ } else continue;
} else if
(msg.getSpec().equals(DMT.missingPacketNotification)) {
LinkedList missing = (LinkedList)
msg.getObject(DMT.MISSING);
for (Iterator i = missing.iterator();
i.hasNext();) {
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-11-30 21:42:38 UTC (rev
7641)
+++ trunk/freenet/src/freenet/node/Version.java 2005-11-30 22:08:47 UTC (rev
7642)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 253;
+ public static final int buildNumber = 254;
/** Oldest build of Fred we will talk to */
- public static final int lastGoodBuild = 252;
+ public static final int lastGoodBuild = 254;
/** The highest reported build of fred */
public static int highestSeenBuild = buildNumber;