Author: toad
Date: 2008-03-24 23:51:37 +0000 (Mon, 24 Mar 2008)
New Revision: 18762
Modified:
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Check for tracker timeouts even if we send data packets and therefore don't
call sendAnyNotifications.
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2008-03-24 23:41:23 UTC
(rev 18761)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2008-03-24 23:51:37 UTC
(rev 18762)
@@ -240,6 +240,8 @@
else
nextActionTime =
Math.min(nextActionTime, urgentTime);
+ pn.checkTrackerTimeout();
+
// Any packets to resend?
for(int j = 0; j < 2; j++) {
KeyTracker kt;
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-03-24 23:41:23 UTC
(rev 18761)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-03-24 23:51:37 UTC
(rev 18762)
@@ -2409,18 +2409,27 @@
} catch(WouldBlockException e) {
Logger.error(this, "Impossible: " + e,
e);
}
- if(t > -1 && tracker.timeLastDecodedPacket() > 0 &&
(now - tracker.timeLastDecodedPacket()) > 60*1000 &&
- cur != null &&
cur.timeLastDecodedPacket() > 0 && (now - cur.timeLastDecodedPacket() <
30*1000) &&
- (tracker.countAckRequests() > 0 ||
tracker.countResendRequests() > 0)) {
- Logger.error(this, "No packets decoded on
"+tracker+" for 60 seconds, deprecating in favour of cur: "+cur);
- prev.completelyDeprecated(cur);
- synchronized(this) {
- if(previousTracker == prev)
- previousTracker = null;
- }
- }
}
}
+
+ void checkTrackerTimeout() {
+ long now = System.currentTimeMillis();
+ KeyTracker prev = null;
+ KeyTracker cur = null;
+ synchronized(this) {
+ if(previousTracker == null) return;
+ if(currentTracker == null) return;
+ cur = currentTracker;
+ prev = previousTracker;
+ }
+ long t = previousTracker.getNextUrgentTime(); // LOCKING:
should be safe, only inner structures
+ if(!(t > -1 && previousTracker.timeLastDecodedPacket() > 0 &&
(now - previousTracker.timeLastDecodedPacket()) > 60*1000 &&
+ currentTracker.timeLastDecodedPacket() > 0 &&
(now - currentTracker.timeLastDecodedPacket() < 30*1000) &&
+ (previousTracker.countAckRequests() > 0 ||
previousTracker.countResendRequests() > 0)))
+ return;
+ Logger.error(this, "No packets decoded on "+prev+" for 60
seconds, deprecating in favour of cur: "+cur);
+ prev.completelyDeprecated(cur);
+ }
/**
* Get a PeerNodeStatus for this node.