Author: toad
Date: 2006-01-27 02:34:43 +0000 (Fri, 27 Jan 2006)
New Revision: 7948

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/RequestStarter.java
   trunk/freenet/src/freenet/node/Version.java
Log:
399:
Fix requests getting lost, (bug resulted in e.g. fproxy requests hanging).

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-01-27 02:01:32 UTC (rev 
7947)
+++ trunk/freenet/src/freenet/node/Node.java    2006-01-27 02:34:43 UTC (rev 
7948)
@@ -1410,8 +1410,8 @@
                        DSAPublicKey key = pubKeyDatastore.fetchPubKey(hash, 
false);
                        if(key != null) {
                                cacheKey(hash, key);
+                               Logger.minor(this, "Got 
"+HexUtil.bytesToHex(hash)+" from store");
                        }
-                       Logger.minor(this, "Got "+HexUtil.bytesToHex(hash)+" 
from store");
                        return key;
                } catch (IOException e) {
                        // FIXME deal with disk full, access perms etc; tell 
user about it.

Modified: trunk/freenet/src/freenet/node/RequestStarter.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestStarter.java  2006-01-27 02:01:32 UTC 
(rev 7947)
+++ trunk/freenet/src/freenet/node/RequestStarter.java  2006-01-27 02:34:43 UTC 
(rev 7948)
@@ -66,37 +66,47 @@
        }

        void realRun() {
-               SendableRequest req = sched.removeFirst();
-               if(req != null) {
-                       // Create a thread to handle starting the request, and 
the resulting feedback
-                       Thread t = new Thread(new SenderThread(req));
-                       t.setDaemon(true);
-                       t.start();
-                       sentRequestTime = System.currentTimeMillis();
-                       // Wait
-                       long delay = throttle.getDelay();
-                       Logger.minor(this, "Delay="+delay+" from "+throttle);
-                       long sleepUntil = sentRequestTime + delay;
-                       long now;
-                       do {
-                               now = System.currentTimeMillis();
-                               if(now < sleepUntil)
+               SendableRequest req = null;
+               while(true) {
+                       if(req == null) req = sched.removeFirst();
+                       if(req != null) {
+                               Logger.minor(this, "Running "+req);
+                               // Create a thread to handle starting the 
request, and the resulting feedback
+                               Thread t = new Thread(new SenderThread(req));
+                               t.setDaemon(true);
+                               t.start();
+                               Logger.minor(this, "Started "+req+" on "+t);
+                               sentRequestTime = System.currentTimeMillis();
+                               // Wait
+                               long delay = throttle.getDelay();
+                               Logger.minor(this, "Delay="+delay+" from 
"+throttle);
+                               long sleepUntil = sentRequestTime + delay;
+                               long now;
+                               do {
+                                       now = System.currentTimeMillis();
+                                       if(now < sleepUntil)
+                                               try {
+                                                       Thread.sleep(sleepUntil 
- now);
+                                                       Logger.minor(this, 
"Slept: "+(sleepUntil-now)+"ms");
+                                               } catch (InterruptedException 
e) {
+                                                       // Ignore
+                                               }
+                               } while(now < sleepUntil);
+                               return;
+                       } else {
+                               Logger.minor(this, "Waiting...");
+                               synchronized(this) {
+                                       // Always take the lock on 
RequestStarter first.
+                                       req = sched.removeFirst();
+                                       if(req != null) {
+                                               continue;
+                                       }
                                        try {
-                                               Thread.sleep(sleepUntil - now);
-                                               Logger.minor(this, "Slept: 
"+(sleepUntil-now)+"ms");
+                                               wait(1000);
                                        } catch (InterruptedException e) {
                                                // Ignore
                                        }
-                       } while(now < sleepUntil);
-               } else {
-                       synchronized(this) {
-                               // Always take the lock on RequestStarter first.
-                               req = sched.removeFirst();
-                               if(req != null) return;
-                               try {
-                                       wait(1000);
-                               } catch (InterruptedException e) {
-                                       // Ignore
+                                       return;
                                }
                        }
                }

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-27 02:01:32 UTC (rev 
7947)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-27 02:34:43 UTC (rev 
7948)
@@ -20,10 +20,10 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 398;
+       public static final int buildNumber = 399;

        /** Oldest build of Fred we will talk to */
-       public static final int lastGoodBuild = 392;
+       public static final int lastGoodBuild = 399;

        /** The highest reported build of fred */
        public static int highestSeenBuild = buildNumber;


Reply via email to