Author: nextgens
Date: 2006-09-24 11:08:34 +0000 (Sun, 24 Sep 2006)
New Revision: 10507

Modified:
   trunk/freenet/src/freenet/config/FreenetFilePersistentConfig.java
   trunk/freenet/src/freenet/node/Node.java
Log:
Cleaner design for FreenetFilePersistentConfig : we don't need the node object 
at all in fact

Modified: trunk/freenet/src/freenet/config/FreenetFilePersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/FreenetFilePersistentConfig.java   
2006-09-24 10:44:38 UTC (rev 10506)
+++ trunk/freenet/src/freenet/config/FreenetFilePersistentConfig.java   
2006-09-24 11:08:34 UTC (rev 10507)
@@ -3,13 +3,39 @@
 import java.io.File;
 import java.io.IOException;

-import freenet.node.Node;
+import freenet.node.Ticker;
 import freenet.support.Logger;

 public class FreenetFilePersistentConfig extends FilePersistentConfig {
-
-       private Node node;
        private boolean isWritingConfig = false;
+       private boolean hasNodeStarted = false;
+       private Ticker ticker;
+       public final Runnable thread = new Runnable() {
+               public void run() {
+                       while(!hasNodeStarted){
+                               synchronized (this) {
+                                               hasNodeStarted = true;
+                                               try{
+                                                       wait(100);
+                                               } catch (InterruptedException 
e) {
+                                                       hasNodeStarted = false; 
+                                               }
+                               }
+                       }
+                       
+                       try {
+                               innerStore();
+                       } catch (IOException e) {
+                               String err = "Cannot store config: "+e;
+                               Logger.error(this, err, e);
+                               System.err.println(err);
+                               e.printStackTrace();
+                       }
+                       synchronized (storeSync) {
+                               isWritingConfig = false;
+                       }
+               }
+       };

        public FreenetFilePersistentConfig(File f) throws IOException {
                super(f);
@@ -23,39 +49,18 @@
                        }
                }
                synchronized(storeSync) {
-                       if(isWritingConfig || node == null){
+                       if(isWritingConfig || ticker == null){
                                Logger.normal(this, "Already writing the config 
file to disk or the node object hasn't been set : refusing to proceed");
                                return;
                        }
                        isWritingConfig = true;

-                       node.ps.queueTimedJob(new Runnable() {
-                               public void run() {
-                                       try{
-                                               while(!node.isHasStarted())
-                                                       Thread.sleep(1000);
-                                       }catch (InterruptedException e) {}
-                                       try {
-                                               innerStore();
-                                       } catch (IOException e) {
-                                               String err = "Cannot store 
config: "+e;
-                                               Logger.error(this, err, e);
-                                               System.err.println(err);
-                                               e.printStackTrace();
-                                       }
-                                       synchronized (storeSync) {
-                                               isWritingConfig = false;
-                                       }
-                               }
-                       }, 0);
+                       ticker.queueTimedJob(thread, 0);
                }
        }

-       public void setNode(Node n){
-               if(node != null){
-                       Logger.error(this, "The node object has already been 
initialized! it's likely to be a bug.");
-                       return;
-               }
-               this.node = n;
+       public void finishedInit(Ticker ticker) {
+               super.finishedInit();
+               this.ticker = ticker;
        }
 }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-09-24 10:44:38 UTC (rev 
10506)
+++ trunk/freenet/src/freenet/node/Node.java    2006-09-24 11:08:34 UTC (rev 
10507)
@@ -1404,9 +1404,11 @@
                this.clientCore.start(config);

                // After everything has been created, write the config file 
back to disk.
-               config.finishedInit();
-               config.setNode(this);
+               config.finishedInit(this.ps);
                config.store();
+               synchronized (config.thread) {
+                       config.thread.notify(); 
+               }

                // Process any data in the extra peer data directory
                peers.readExtraPeerData();


Reply via email to