Author: felixk
Date: Tue Mar 22 17:57:06 2011
New Revision: 1084270

URL: http://svn.apache.org/viewvc?rev=1084270&view=rev
Log:
Make sure streams get closed and don't leave open file handles back.

Modified:
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java?rev=1084270&r1=1084269&r2=1084270&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
 Tue Mar 22 17:57:06 2011
@@ -37,6 +37,7 @@ import java.util.NoSuchElementException;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -177,18 +178,20 @@ public class MaildirFolder {
      */
     private void readLastUid() throws IOException {
         File uidList = lockUidList();
+        FileReader fileReader = null;
+        BufferedReader reader = null;
         try {
             if (!uidList.exists())
                 createUidFile();
-            FileReader fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            fileReader = new FileReader(uidList);
+            reader = new BufferedReader(fileReader);
             String line = reader.readLine();
-            reader.close();
-            fileReader.close();
             if (line != null)
                 readUidListHeader(line);
         }
         finally {
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
             unlockUidList();
         }
     }
@@ -226,13 +229,18 @@ public class MaildirFolder {
         if (!validityFile.exists()) {
             return resetUidValidity();
         }
-        FileInputStream fis = new FileInputStream(validityFile);
-        InputStreamReader isr = new InputStreamReader(fis);
-        char[] uidValidity = new char[20];
-        int len = isr.read(uidValidity);
-        isr.close();
-        fis.close();
-        return Long.parseLong(String.valueOf(uidValidity, 0, len).trim());
+        FileInputStream fis = null;
+        InputStreamReader isr = null;
+        try {
+            fis = new FileInputStream(validityFile);
+            isr = new InputStreamReader(fis);
+            char[] uidValidity = new char[20];
+            int len = isr.read(uidValidity);
+            return Long.parseLong(String.valueOf(uidValidity, 0, len).trim());
+        } finally {
+            IOUtils.closeQuietly(isr);
+            IOUtils.closeQuietly(fis);
+        }
     }
 
     /**
@@ -244,8 +252,11 @@ public class MaildirFolder {
         File validityFile = new File(rootFolder, VALIDITY_FILE);
         validityFile.createNewFile();
         FileOutputStream fos = new FileOutputStream(validityFile);
-        fos.write(String.valueOf(uidValidity).getBytes());
-        fos.close();
+        try {
+            fos.write(String.valueOf(uidValidity).getBytes());
+        } finally {
+            IOUtils.closeQuietly(fos);
+        }
     }
     
     /**
@@ -269,23 +280,25 @@ public class MaildirFolder {
     public MaildirMessageName getMessageNameByUid(Long uid) throws 
IOException, FileNotFoundException {
         File uidList = lockUidList();
         MaildirMessageName messageName = null;
+        FileReader fileReader = null;
+        BufferedReader reader = null;
         try {
-            FileReader fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            fileReader = new FileReader(uidList);
+            reader = new BufferedReader(fileReader);
             String uidString = String.valueOf(uid);
             String line = reader.readLine(); // the header
             while ((line = reader.readLine()) != null) {
                 if (!line.equals("")) {
                     int gap = line.indexOf(" ");
                     if (line.substring(0, gap).equals(uidString)) {
-                        fileReader.close();
                         messageName = new MaildirMessageName(this, 
line.substring(gap + 1));
                         break;
                     }
                 }
             }
-            fileReader.close();
         } finally {
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
             unlockUidList();
         }
         return messageName;
@@ -388,18 +401,28 @@ public class MaildirFolder {
                 for (String file : allFiles)
                     lines.add(String.valueOf(getNextUid()) + " " + file);
                 PrintWriter pw = new PrintWriter(uidList);
-                pw.println(createUidListHeader());
-                for (String line : lines)
-                    pw.println(line);
-                pw.close();
+                try {
+                    pw.println(createUidListHeader());
+                    for (String line : lines)
+                       pw.println(line);
+                } finally {
+                    IOUtils.closeQuietly(pw);
+                }
             }
             else {
-                FileReader fileReader = new FileReader(uidList);
-                BufferedReader reader = new BufferedReader(fileReader);
-                String line = reader.readLine();
-                // the first line in the file contains the next uid and 
message count
-                while ((line = reader.readLine()) != null)
-                    lines.add(line);
+                FileReader fileReader = null;
+                BufferedReader reader = null;
+               try {
+                    fileReader = new FileReader(uidList);
+                    reader = new BufferedReader(fileReader);
+                    String line = reader.readLine();
+                    // the first line in the file contains the next uid and 
message count
+                    while ((line = reader.readLine()) != null)
+                        lines.add(line);
+                } finally {
+                    IOUtils.closeQuietly(reader);
+                    IOUtils.closeQuietly(fileReader);
+                }
             }
             int counter = 0;
             String line;
@@ -438,6 +461,7 @@ public class MaildirFolder {
     private Map<Long, MaildirMessageName> createUidFile() throws IOException {
         Map<Long, MaildirMessageName> uidMap = null;
         File uidList = lockUidList();
+        PrintWriter pw = null;
         try {
             uidList.createNewFile();
             lastUid = 0;
@@ -449,13 +473,13 @@ public class MaildirFolder {
             for (String file : allFiles)
                 uidMap.put(getNextUid(), new MaildirMessageName(this, file));
             uidMap = new TreeMap<Long, MaildirMessageName>(uidMap);
-            PrintWriter pw = new PrintWriter(uidList);
+            pw = new PrintWriter(uidList);
             pw.println(createUidListHeader());
             for (Entry<Long, MaildirMessageName> entry : uidMap.entrySet())
                 pw.println(String.valueOf(entry.getKey()) + " " + 
entry.getValue().getFullName());
-            pw.close();
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(pw);
         }
         return uidMap;
     }
@@ -469,9 +493,11 @@ public class MaildirFolder {
         uidMap = new HashMap<Long, MaildirMessageName>(messageCount);
         HashMap<String, Long> reverseUidMap = new HashMap<String, 
Long>(messageCount);
         FileReader fileReader = null;
+        BufferedReader reader = null;
+        PrintWriter pw = null;
         try {
             fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            reader = new BufferedReader(fileReader);
             String line = reader.readLine();
             // the first line in the file contains the next uid and message 
count
             if (line != null)
@@ -484,7 +510,6 @@ public class MaildirFolder {
                     reverseUidMap.put(stripMetaFromName(name), uid);
                 }
             }
-            fileReader.close();
             String[] allFiles = (String[]) ArrayUtils.addAll(curFiles, 
newFiles);
             for (String file : allFiles) {
                 MaildirMessageName messageName = new MaildirMessageName(this, 
file);
@@ -494,13 +519,15 @@ public class MaildirFolder {
                 uidMap.put(uid, messageName);
             }
             uidMap = new TreeMap<Long, MaildirMessageName>(uidMap);
-            PrintWriter pw = new PrintWriter(uidList);
+            pw = new PrintWriter(uidList);
             pw.println(createUidListHeader());
             for (Entry<Long, MaildirMessageName> entry : uidMap.entrySet())
                 pw.println(String.valueOf(entry.getKey()) + " " + 
entry.getValue().getFullName());
-            pw.close();
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(pw);
+            IOUtils.closeQuietly(fileReader);
+            IOUtils.closeQuietly(fileReader);
         }
         return uidMap;
     }
@@ -508,9 +535,11 @@ public class MaildirFolder {
     private Map<Long, MaildirMessageName> readUidFile(long from, long to) 
throws IOException, FileNotFoundException {
         Map<Long, MaildirMessageName> uidMap = null; 
         File uidList = lockUidList();
+        FileReader fileReader = null;
+        BufferedReader reader = null;
         try {
-            FileReader fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            fileReader = new FileReader(uidList);
+            reader = new BufferedReader(fileReader);
             String line = reader.readLine();
             // the first line in the file contains the next uid and message 
count
             if (line != null)
@@ -528,9 +557,10 @@ public class MaildirFolder {
                     }
                 }
             }
-            fileReader.close();
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
         }
         messageCount = uidMap.size();
         return uidMap;
@@ -599,10 +629,13 @@ public class MaildirFolder {
     public long appendMessage(String name) throws IOException {
         File uidList = lockUidList();
         long uid = -1;
+        FileReader fileReader = null;
+        BufferedReader reader = null;
+        PrintWriter pw = null;
         try {
             if (uidList.isFile()) {
-                FileReader fileReader = new FileReader(uidList);
-                BufferedReader reader = new BufferedReader(fileReader);
+                fileReader = new FileReader(uidList);
+                reader = new BufferedReader(fileReader);
                 String line = reader.readLine();
                 // the first line in the file contains the next uid and 
message count
                 if (line != null)
@@ -613,12 +646,10 @@ public class MaildirFolder {
                 uid = getNextUid();
                 lines.add(String.valueOf(uid) + " " + name);
                 messageCount++;
-                fileReader.close();
-                PrintWriter writer = new PrintWriter(uidList);
-                writer.println(createUidListHeader());
+                pw = new PrintWriter(uidList);
+                pw.println(createUidListHeader());
                 for (String entry : lines)
-                    writer.println(entry);
-                writer.close();
+                    pw.println(entry);
             }
             else {
                 // create the file
@@ -635,14 +666,16 @@ public class MaildirFolder {
                     if (file.equals(name))
                         uid = theUid;
                 }
-                PrintWriter pw = new PrintWriter(uidList);
+                pw = new PrintWriter(uidList);
                 pw.println(createUidListHeader());
                 for (String line : lines)
                     pw.println(line);
-                pw.close();
             }
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(pw);
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
         }
         if (uid == -1)
             throw new FileNotFoundException(name);
@@ -657,9 +690,12 @@ public class MaildirFolder {
      */
     public void update(long uid, String messageName) throws IOException {
         File uidList = lockUidList();
+        FileReader fileReader = null;
+        BufferedReader reader = null;
+        PrintWriter writer = null;
         try {
-            FileReader fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            fileReader = new FileReader(uidList);
+            reader = new BufferedReader(fileReader);
             String line = reader.readLine();
             readUidListHeader(line);
             ArrayList<String> lines = new ArrayList<String>(messageCount);
@@ -668,14 +704,15 @@ public class MaildirFolder {
                     line = String.valueOf(uid) + " " + messageName;
                 lines.add(line);
             }
-            fileReader.close();
-            PrintWriter writer = new PrintWriter(uidList);
+            writer = new PrintWriter(uidList);
             writer.println(createUidListHeader());
             for (String entry : lines)
                 writer.println(entry);
-            writer.close();
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(writer);
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
         }
     }
     
@@ -689,9 +726,12 @@ public class MaildirFolder {
     public MaildirMessageName delete(long uid) throws IOException {
         MaildirMessageName deletedMessage = null;
         File uidList = lockUidList();
+        FileReader fileReader = null;
+        BufferedReader reader = null;
+        PrintWriter writer = null;
         try {
-            FileReader fileReader = new FileReader(uidList);
-            BufferedReader reader = new BufferedReader(fileReader);
+            fileReader = new FileReader(uidList);
+            reader = new BufferedReader(fileReader);
             readUidListHeader(reader.readLine());
             ArrayList<String> lines = new ArrayList<String>(messageCount-1);
             String line;
@@ -705,18 +745,19 @@ public class MaildirFolder {
                     lines.add(line);
                 }
             }
-            fileReader.close();
             if (deletedMessage != null) {
                 if (!deletedMessage.getFile().delete())
                     throw new IOException("Cannot delete file " + 
deletedMessage.getFile().getAbsolutePath());
-                PrintWriter writer = new PrintWriter(uidList);
+                writer = new PrintWriter(uidList);
                 writer.println(createUidListHeader());
                 for (String entry : lines)
                     writer.println(entry);
-                writer.close();
             }
         } finally {
             unlockUidList();
+            IOUtils.closeQuietly(writer);
+            IOUtils.closeQuietly(reader);
+            IOUtils.closeQuietly(fileReader);
         }
         return deletedMessage;
     }

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java?rev=1084270&r1=1084269&r2=1084270&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java
 Tue Mar 22 17:57:06 2011
@@ -28,6 +28,7 @@ import java.util.List;
 
 import javax.mail.util.SharedFileInputStream;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.maildir.MaildirMessageName;
 import org.apache.james.mailbox.store.mail.model.Header;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -132,15 +133,24 @@ public class LazyLoadingMaildirMessage e
                 propertyBuilder.setBoundary(boundary);
             }
             if ("text".equalsIgnoreCase(mediaType)) {
+                long lines = -1;
                 final CountingInputStream bodyStream = new 
CountingInputStream(parser.getInputStream());
-                bodyStream.readAll();
-                long lines = bodyStream.getLineCount();
+                try {
+                    bodyStream.readAll();
+                    lines = bodyStream.getLineCount();
+                } finally {
+                    IOUtils.closeQuietly(bodyStream);
+                }
 
                 next = parser.next();
                 if (next == MimeTokenStream.T_EPILOGUE) {
                     final CountingInputStream epilogueStream = new 
CountingInputStream(parser.getInputStream());
-                    epilogueStream.readAll();
-                    lines += epilogueStream.getLineCount();
+                    try {
+                        epilogueStream.readAll();
+                        lines += epilogueStream.getLineCount();
+                    } finally {
+                        IOUtils.closeQuietly(epilogueStream);
+                    }
                 }
                 propertyBuilder.setTextualLineCount(lines);
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to