Author: nextgens
Date: 2007-11-22 22:31:30 +0000 (Thu, 22 Nov 2007)
New Revision: 15934

Modified:
   trunk/freenet/src/freenet/node/PeerManager.java
Log:
PeerManager: ensure that we don't leak a fd

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-11-22 22:27:38 UTC 
(rev 15933)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-11-22 22:31:30 UTC 
(rev 15934)
@@ -35,6 +35,7 @@
 import freenet.support.ShortBuffer;
 import freenet.support.SimpleFieldSet;
 import freenet.support.io.FileUtil;
+import freenet.support.io.Closer;

 /**
  * @author amphibian
@@ -853,25 +854,27 @@
      */
     private void writePeersInner(String filename, PeerNode[] peers) {
         synchronized (writePeersSync) {
-            FileOutputStream fos;
+            FileOutputStream fos = null;
             String f = filename + ".bak";
             try {
                 fos = new FileOutputStream(f);
             } catch (FileNotFoundException e2) {
                 Logger.error(this, "Cannot write peers to disk: Cannot create "
                         + f + " - " + e2, e2);
+               Closer.close(fos);
                 return;
             }
-            OutputStreamWriter w;
+            OutputStreamWriter w = null;
                        try {
                                w = new OutputStreamWriter(fos, "UTF-8");
                        } catch (UnsupportedEncodingException e2) {
+                               Closer.close(w);
                                throw new Error("UTF-8 unsupported!: "+e2, e2);
                        }
             BufferedWriter bw = new BufferedWriter(w);
             try {
                boolean succeeded = writePeers(bw, peers);
-                bw.close();
+                bw.close(); bw = null;
                 if(!succeeded) return;
             } catch (IOException e) {
                try {
@@ -881,7 +884,10 @@
                }
                 Logger.error(this, "Cannot write file: " + e, e);
                 return; // don't overwrite old file!
-            }
+            } finally {
+                   Closer.close(bw);
+                   Closer.close(fos);
+           }
             File fnam = new File(filename);
             FileUtil.renameTo(new File(f), fnam);
         }


Reply via email to