Author: toad
Date: 2008-03-07 17:35:15 +0000 (Fri, 07 Mar 2008)
New Revision: 18413

Modified:
   trunk/freenet/src/freenet/node/KeyTracker.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Move getThrottle() to PeerNode. Should fix NPEs.

Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java      2008-03-07 17:25:35 UTC 
(rev 18412)
+++ trunk/freenet/src/freenet/node/KeyTracker.java      2008-03-07 17:35:15 UTC 
(rev 18413)
@@ -580,7 +580,7 @@
                long timeAdded = sentPacketsContents.getTime(realSeqNo);
                if(sentPacketsContents.remove(realSeqNo)) {
                        if(buf.length > Node.PACKET_SIZE) {
-                               PacketThrottle throttle = getThrottle();
+                               PacketThrottle throttle = pn.getThrottle();
                                throttle.notifyOfPacketAcknowledged();
                                
throttle.setRoundTripTime(System.currentTimeMillis() - timeAdded);
                        }
@@ -600,23 +600,6 @@
                Logger.minor(this, "Executed "+cbCount+" callbacks");
     }

-    private PacketThrottle _lastThrottle;
-    
-    PacketThrottle getThrottle() {
-       // pn.getPeer() cannot be null as it has already connected.
-       PacketThrottle newThrottle = PacketThrottle.getThrottle(pn.getPeer(), 
Node.PACKET_SIZE);
-       PacketThrottle prevThrottle = null;
-       synchronized(this) {
-               if(newThrottle != _lastThrottle) {
-                       prevThrottle = _lastThrottle;
-                       _lastThrottle = newThrottle;
-               } else return newThrottle;
-       }
-       if(prevThrottle != null)
-               prevThrottle.changedAddress(newThrottle);
-       return newThrottle;
-       }
-
        /**
      * Called when we have received a packet acknowledgement.
      * @param realSeqNo
@@ -638,7 +621,7 @@
         long timeAdded = sentPacketsContents.getTime(realSeqNo);
         if(sentPacketsContents.remove(realSeqNo)) {
                if(buf.length > Node.PACKET_SIZE) {
-                       PacketThrottle throttle = getThrottle();
+                       PacketThrottle throttle = pn.getThrottle();
                        throttle.notifyOfPacketAcknowledged();
                        throttle.setRoundTripTime(System.currentTimeMillis() - 
timeAdded);
                }
@@ -670,7 +653,7 @@
         byte[] resendData = sentPacketsContents.get(seqNumber);
         if(resendData != null) {
                if(resendData.length > Node.PACKET_SIZE)
-                       getThrottle().notifyOfPacketLost();
+                       pn.getThrottle().notifyOfPacketLost();
             synchronized(packetsToResend) {
                 packetsToResend.add(new Integer(seqNumber));
             }
@@ -1012,11 +995,6 @@
      * *** Must only be called if the KeyTracker is not to be kept. Otherwise, 
we may receive some packets twice. ***
      */
     public void completelyDeprecated(KeyTracker newTracker) {
-       PacketThrottle throttle;
-       synchronized(this) {
-               throttle = _lastThrottle;
-       }
-       if(throttle != null) throttle.maybeDisconnected();
        if(logMINOR) Logger.minor(this, "Completely deprecated: "+this+" in 
favour of "+newTracker);
        LimitedRangeIntByteArrayMapElement[] elements = clear();
        if(elements.length == 0) return; // nothing more to do
@@ -1039,8 +1017,6 @@
      * Dump all sent messages.
      */
     public void disconnected() {
-       if(_lastThrottle != null)
-               _lastThrottle.maybeDisconnected();
         // Clear everything, call the callbacks
        LimitedRangeIntByteArrayMapElement[] elements = clear();
         for(int i=0;i<elements.length;i++) {

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2008-03-07 17:25:35 UTC 
(rev 18412)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2008-03-07 17:35:15 UTC 
(rev 18413)
@@ -1156,6 +1156,8 @@
                if(cur != null) cur.disconnected();
                if(prev != null) prev.disconnected();
                if(unv != null) unv.disconnected();
+       if(_lastThrottle != null)
+               _lastThrottle.maybeDisconnected();
                node.lm.lostOrRestartedNode(this);
                setPeerNodeStatus(now);
                if(!dumpMessageQueue) {
@@ -1849,6 +1851,11 @@
                        oldCur.completelyDeprecated(newTracker);
                if(prev != null)
                        prev.deprecated();
+       PacketThrottle throttle;
+       synchronized(this) {
+               throttle = _lastThrottle;
+       }
+       if(throttle != null) throttle.maybeDisconnected();
                Logger.normal(this, "Completed handshake with " + this + " on " 
+ replyTo + " - current: " + currentTracker +
                        " old: " + previousTracker + " unverified: " + 
unverifiedTracker + " bootID: " + thisBootID + " for " + shortToString());

@@ -3050,14 +3057,21 @@
                return Version.getArbitraryBuildNumber(getVersion(), -1);
        }

-       public PacketThrottle getThrottle() {
-               if(currentTracker != null)
-                       return currentTracker.getThrottle();
-               if(unverifiedTracker != null)
-                       return unverifiedTracker.getThrottle();
-               if(previousTracker != null)
-                       return previousTracker.getThrottle();
-               return null;
+    private PacketThrottle _lastThrottle;
+    
+    public PacketThrottle getThrottle() {
+       // pn.getPeer() cannot be null as it has already connected.
+       PacketThrottle newThrottle = PacketThrottle.getThrottle(getPeer(), 
Node.PACKET_SIZE);
+       PacketThrottle prevThrottle = null;
+       synchronized(this) {
+               if(newThrottle != _lastThrottle) {
+                       prevThrottle = _lastThrottle;
+                       _lastThrottle = newThrottle;
+               } else return newThrottle;
+       }
+       if(prevThrottle != null)
+               prevThrottle.changedAddress(newThrottle);
+       return newThrottle;
        }

        /**


Reply via email to