Author: toad
Date: 2006-12-14 19:45:37 +0000 (Thu, 14 Dec 2006)
New Revision: 11399

Modified:
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Fix N2NTM bug. We were processing the SimpleFieldSet before we closed the file, 
and therefore trying to delete it while it was still open. This works on *nix, 
but NOT on Windows.

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-12-14 19:30:35 UTC 
(rev 11398)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-12-14 19:45:37 UTC 
(rev 11399)
@@ -2594,6 +2594,8 @@
        }

        public boolean rereadExtraPeerDataFile(int fileNumber) {
+               if(logMINOR)
+                       Logger.minor(this, "Rereading peer data file 
"+fileNumber+" for "+shortToString());
                String extraPeerDataDirPath = node.getExtraPeerDataDir();
                File extraPeerDataPeerDir = new 
File(extraPeerDataDirPath+File.separator+getIdentityString());
                if(!extraPeerDataPeerDir.exists()) {
@@ -2613,8 +2615,11 @@
        }

        public boolean readExtraPeerDataFile(File extraPeerDataFile, int 
fileNumber) {
+               if(logMINOR) Logger.minor(this, "Reading "+extraPeerDataFile+" 
: "+fileNumber+" for "+shortToString());
                boolean gotError = false;
                if(!extraPeerDataFile.exists()) {
+                       if(logMINOR)
+                               Logger.minor(this, "Does not exist");
                        return false;
                }
                Logger.normal(this, "extraPeerDataFile: 
"+extraPeerDataFile.getPath());
@@ -2627,20 +2632,10 @@
                }
                InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader br = new BufferedReader(isr);
+               SimpleFieldSet fs = null;
                try {
                        // Read in the single SimpleFieldSet
-                       SimpleFieldSet fs;
                        fs = new SimpleFieldSet(br);
-                       boolean parseResult = false;
-                       try {
-                               parseResult = parseExtraPeerData(fs, 
extraPeerDataFile, fileNumber);
-                               if(!parseResult) {
-                                       gotError = true;
-                               }
-                       } catch (FSParseException e2) {
-                               Logger.error(this, "Could not parse extra peer 
data: "+e2+ '\n' +fs.toString(),e2);
-                               gotError = true;
-                       }
                } catch (EOFException e3) {
                        // End of file, fine
                } catch (IOException e4) {
@@ -2652,6 +2647,21 @@
                                Logger.error(this, "Ignoring "+e5+" caught 
reading "+extraPeerDataFile.getPath(), e5);
                        }
                }
+               if(fs == null) {
+                       Logger.normal(this, "Deleting corrupt (too short?) 
file: "+extraPeerDataFile);
+                       deleteExtraPeerDataFile(fileNumber);
+                       return true;
+               }
+               boolean parseResult = false;
+               try {
+                       parseResult = parseExtraPeerData(fs, extraPeerDataFile, 
fileNumber);
+                       if(!parseResult) {
+                               gotError = true;
+                       }
+               } catch (FSParseException e2) {
+                       Logger.error(this, "Could not parse extra peer data: 
"+e2+ '\n' +fs.toString(),e2);
+                       gotError = true;
+               }
                return !gotError;
        }

@@ -2933,6 +2943,8 @@
        }

        public void sendQueuedN2NTMs() {
+               if(logMINOR)
+                       Logger.minor(this, "Sending queued N2NTMs for 
"+shortToString());
                Integer[] localFileNumbers = null;
                synchronized(queuedToSendN2NTMExtraPeerDataFileNumbers) {
                        localFileNumbers = (Integer[]) 
queuedToSendN2NTMExtraPeerDataFileNumbers.toArray(new 
Integer[queuedToSendN2NTMExtraPeerDataFileNumbers.size()]);


Reply via email to