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();