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.


Reply via email to