Author: toad
Date: 2006-06-10 20:36:46 +0000 (Sat, 10 Jun 2006)
New Revision: 9139

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/Version.java
Log:
800: Re-entrancy/locking changes relating to peer node backoff reasons 
structure on Node.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-10 19:19:45 UTC (rev 
9138)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-10 20:36:46 UTC (rev 
9139)
@@ -3006,28 +3006,33 @@
     /**
      * Add a PeerNode routing backoff reason to the map
      */
-    public synchronized void addPeerNodeRoutingBackoffReason(String 
peerNodeRoutingBackoffReason, PeerNode peerNode) {
-       HashSet reasonSet = null;
-       
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
-               reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
-               if(reasonSet.contains(peerNode)) {
-                       Logger.error(this, "addPeerNodeRoutingBackoffReason(): 
identity '"+peerNode.getIdentityString()+"' already in 
peerNodeRoutingBackoffReasons as "+peerNode+" with status code 
"+peerNodeRoutingBackoffReason);
-                       return;
+    public void addPeerNodeRoutingBackoffReason(String 
peerNodeRoutingBackoffReason, PeerNode peerNode) {
+       synchronized(peerNodeRoutingBackoffReasons) {
+               HashSet reasonSet = null;
+               
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
+                       reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
+                       if(reasonSet.contains(peerNode)) {
+                               Logger.error(this, 
"addPeerNodeRoutingBackoffReason(): identity '"+peerNode.getIdentityString()+"' 
already in peerNodeRoutingBackoffReasons as "+peerNode+" with status code 
"+peerNodeRoutingBackoffReason);
+                               return;
+                       }
+                       
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
+               } else {
+                       reasonSet = new HashSet();
                }
-               
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
-       } else {
-               reasonSet = new HashSet();
+               Logger.minor(this, "addPeerNodeRoutingBackoffReason(): adding 
PeerNode for '"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
+               reasonSet.add(peerNode);
+               peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, 
reasonSet);
        }
-       Logger.minor(this, "addPeerNodeRoutingBackoffReason(): adding PeerNode 
for '"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
-       reasonSet.add(peerNode);
-       peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, 
reasonSet);
     }

     /**
      * What are the currently tracked PeerNode routing backoff reasons?
      */
     public String [] getPeerNodeRoutingBackoffReasons() {
-       String [] reasonStrings = (String []) 
peerNodeRoutingBackoffReasons.keySet().toArray(new 
String[peerNodeRoutingBackoffReasons.size()]);
+       String [] reasonStrings;
+       synchronized(peerNodeRoutingBackoffReasons) {
+               reasonStrings = (String []) 
peerNodeRoutingBackoffReasons.keySet().toArray(new 
String[peerNodeRoutingBackoffReasons.size()]);
+       }
        Arrays.sort(reasonStrings);
        return reasonStrings;
     }
@@ -3037,12 +3042,14 @@
      */
     public int getPeerNodeRoutingBackoffReasonSize(String 
peerNodeRoutingBackoffReason) {
        HashSet reasonSet = null;
-       
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
-               reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
-       } else {
-               reasonSet = new HashSet();
+       synchronized(peerNodeRoutingBackoffReasons) {
+               
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
+                       reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
+                       return reasonSet.size();
+               } else {
+                       return 0;
+               }
        }
-       return reasonSet.size();
     }

     /**

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-10 19:19:45 UTC (rev 
9138)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-10 20:36:46 UTC (rev 
9139)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 799;
+       private static final int buildNumber = 800;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to