Update of /cvsroot/freenet/freenet/src/freenet/node
In directory sc8-pr-cvs1:/tmp/cvs-serv1211/src/freenet/node

Modified Files:
      Tag: ngrouting
        ConnectionOpener.java 
Log Message:
fix race that may have been causing most of the RNFs. logging.


Index: ConnectionOpener.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/node/ConnectionOpener.java,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- ConnectionOpener.java       21 Aug 2003 02:53:09 -0000      1.1.2.6
+++ ConnectionOpener.java       30 Aug 2003 19:40:55 -0000      1.1.2.7
@@ -21,10 +21,19 @@
     int startBackoffDelay=1000;
     protected boolean isUnscheduled = true;
     public static final Hashtable connOpeners = new Hashtable();
+    protected boolean logDEBUG;
+    
+    public String toString() {
+       return super.toString()+": isUnscheduled="+isUnscheduled;
+    }
     
     public static void scheduleConnectionOpener(NodeReference ref, 
                                                RoutingTable rt, 
                                                Node n) {
+       if(n.logger.shouldLog(Logger.DEBUG))
+           n.logger.log(ConnectionOpener.class, 
+                        "Scheduling ConnectionOpener for "+ref,
+                        Logger.DEBUG);
        Identity i = ref.getIdentity();
        if(!rt.references(i)) {
            if(Core.logger.shouldLog(Logger.DEBUG))
@@ -51,6 +60,7 @@
        this.rt = rt;
        this.node = node;
        this.id = ref.getIdentity();
+       logDEBUG = node.logger.shouldLog(Logger.DEBUG);
     }
     
     public String getCheckpointName() {
@@ -58,14 +68,26 @@
     }
     
     public long nextCheckpoint() {
-       if((!rt.references(id)) || 
-          (node.connections.findFreeConnection(id) != null)) {
+       logDEBUG = node.logger.shouldLog(Logger.DEBUG);
+       if(logDEBUG)
+           node.logger.log(this, "nextCheckpoint() on "+this,
+                           Logger.DEBUG);
+       boolean rtReferencesMe = rt.references(id);
+       boolean hasFreeConn = node.connections.findFreeConnection(id) != null;
+       if((!rtReferencesMe) || hasFreeConn) {
+           if(logDEBUG)
+               node.logger.log(this, "unscheduling "+this+" (open conns: "+
+                               hasFreeConn+", in RT: "+
+                               rtReferencesMe+")", Logger.DEBUG);
            isUnscheduled = true;
            synchronized(connOpeners) {
                connOpeners.remove(id);
            }
            return -1;
        }
+       if(logDEBUG)
+           node.logger.log(this, "Scheduling in "+currentDelay+
+                           "ms", Logger.DEBUG);
        return System.currentTimeMillis()+currentDelay;
     }
     
@@ -74,14 +96,30 @@
     }
     
     public synchronized void reschedule() {
+       if(logDEBUG)
+           node.logger.log(this, "Rescheduling "+this,
+                           new Exception("debug"), Logger.DEBUG);
        if(isUnscheduled) {
-           new Checkpoint(this).schedule(node);
            isUnscheduled = false;
+           if(logDEBUG)
+               node.logger.log(this, "Was unscheduled: "+this,
+                               Logger.DEBUG);
+           new Checkpoint(this).schedule(node);
            connOpeners.put(id, this);
-       }
+           if(logDEBUG)
+               node.logger.log(this, "Rescheduled: "+this,
+                               Logger.DEBUG);
+       } else {
+           if(logDEBUG) 
+               node.logger.log(this, "Was already scheduled: "+this, 
+                               Logger.DEBUG); }
     }
     
     public void checkpoint() {
+       logDEBUG = node.logger.shouldLog(Logger.DEBUG);
+       if(logDEBUG)
+           node.logger.log(this, "Running checkpoint on "+this,
+                           Logger.DEBUG);
        Identity i = ref.getIdentity();
        if(!rt.references(i)) return;
        if(node.connections.findFreeConnection(id) != null) return;

_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to