Author: toad
Date: 2006-06-14 20:24:14 +0000 (Wed, 14 Jun 2006)
New Revision: 9201

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/Version.java
Log:
813: Declare the watchdog variable volatile. Write the new noderef to 
node-*.bak first then rename it, rather than writing it to the original and 
failing over to the backup.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-14 19:56:15 UTC (rev 
9200)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-14 20:24:14 UTC (rev 
9201)
@@ -725,21 +725,36 @@
     }

     public void writeNodeFile() {
+        writeNodeFile(new File(nodeDir, "node-"+portNumber), new File(nodeDir, 
"node-"+portNumber+".bak"));
+    }
+    
+    private void writeNodeFile(File orig, File backup) {
+        SimpleFieldSet fs = exportPrivateFieldSet();
+        
+        if(orig.exists()) backup.delete();
+        
+        OutputStreamWriter osr = null;
         try {
-            writeNodeFile(new File(nodeDir, "node-"+portNumber), new 
File(nodeDir, "node-"+portNumber+".bak"));
+               FileOutputStream fos = new FileOutputStream(backup);
+               osr = new OutputStreamWriter(fos);
+               fs.writeTo(osr);
+            osr.close();
+            if(!backup.renameTo(orig)) {
+               orig.delete();
+               if(!backup.renameTo(orig)) {
+                       Logger.error(this, "Could not rename new node file 
"+backup+" to "+orig);
+               }
+            }
         } catch (IOException e) {
-            Logger.error(this, "Cannot write node file!: "+e+" : 
"+"node-"+portNumber);
+               if(osr != null) {
+                       try {
+                               osr.close();
+                       } catch (IOException e1) {
+                               Logger.error(this, "Cannot close "+backup+": 
"+e1, e1);
+                       }
+               }
         }
     }
-    
-    private void writeNodeFile(File orig, File backup) throws IOException {
-        SimpleFieldSet fs = exportPrivateFieldSet();
-        orig.renameTo(backup);
-        FileOutputStream fos = new FileOutputStream(orig);
-        OutputStreamWriter osr = new OutputStreamWriter(fos);
-        fs.writeTo(osr);
-        osr.close();
-    }

     private void initNodeFileSettings(RandomSource r) {
         Logger.normal(this, "Creating new node file from scratch");

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-06-14 19:56:15 UTC 
(rev 9200)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-06-14 20:24:14 UTC 
(rev 9201)
@@ -30,7 +30,7 @@
     long lastReportedNoPackets;
     long lastReceivedPacketFromAnyNode;
     /** For watchdog. 32-bit to avoid locking. */
-    int lastTimeInSeconds;
+    volatile int lastTimeInSeconds;

     PacketSender(Node node) {
         resendPackets = new LinkedList();

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-14 19:56:15 UTC (rev 
9200)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-14 20:24:14 UTC (rev 
9201)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 812;
+       private static final int buildNumber = 813;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to