Author: toad
Date: 2006-06-20 16:36:54 +0000 (Tue, 20 Jun 2006)
New Revision: 9315

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/RequestSender.java
Log:
Don't start RequestSender thread in constructor.
Don't do datastore lookup in RequestSender while we may hold another lock.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-20 13:50:50 UTC (rev 
9314)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-20 16:36:54 UTC (rev 
9315)
@@ -2299,6 +2299,7 @@
                        sender = new RequestSender(key, null, htl, uid, this, 
closestLocation, source);
                        // RequestSender adds itself to requestSenders
                }
+               sender.start();
                Logger.minor(this, "Created new sender: "+sender);
                return sender;
        }

Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java   2006-06-20 13:50:50 UTC 
(rev 9314)
+++ trunk/freenet/src/freenet/node/RequestSender.java   2006-06-20 16:36:54 UTC 
(rev 9315)
@@ -85,19 +85,22 @@
         this.node = n;
         this.source = source;
         this.nearestLoc = nearestLoc;
-        if(key instanceof NodeSSK && pubKey == null) {
-               pubKey = ((NodeSSK)key).getPubKey();
-               if(pubKey == null)
-                       pubKey = node.getKey(((NodeSSK)key).getPubKeyHash());
-        }
-        
         target = key.toNormalizedDouble();
+    }
+
+    public void start() {
         Thread t = new Thread(this, "RequestSender for UID "+uid);
         t.setDaemon(true);
         t.start();
     }

     public void run() {
+        if(key instanceof NodeSSK && pubKey == null) {
+               pubKey = ((NodeSSK)key).getPubKey();
+               if(pubKey == null)
+                       pubKey = node.getKey(((NodeSSK)key).getPubKeyHash());
+        }
+        
         short origHTL = htl;
         node.addRequestSender(key, htl, this);
         HashSet nodesRoutedTo = new HashSet();


Reply via email to