You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2012/01/31 16:23:59 UTC

svn commit: r1238662 - /james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java

Author: norman
Date: Tue Jan 31 15:23:58 2012
New Revision: 1238662

URL: http://svn.apache.org/viewvc?rev=1238662&view=rev
Log:
Only open the FileOutputStream one time

Modified:
    james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java

Modified: james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java?rev=1238662&r1=1238661&r2=1238662&view=diff
==============================================================================
--- james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java (original)
+++ james/server/trunk/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java Tue Jan 31 15:23:58 2012
@@ -52,6 +52,8 @@ public class ImapRequestFrameDecoder ext
     private final static String NEEDED_DATA = "NEEDED_DATA";
     private final static String STORED_DATA = "STORED_DATA";
     private final static String WRITTEN_DATA = "WRITTEN_DATA";
+    private final static String OUTPUT_STREAM = "OUTPUT_STREAM";
+
 
     public ImapRequestFrameDecoder(ImapDecoder decoder, int inMemorySizeLimit, int literalSizeLimit) {
         this.decoder = decoder;
@@ -95,30 +97,36 @@ public class ImapRequestFrameDecoder ext
                     final File f;
                     int written;
 
+                    OutputStream out = null;
                     // check if we have created a temporary file already or if
                     // we need to create a new one
                     if (attachment.containsKey(STORED_DATA)) {
                         f = (File) attachment.get(STORED_DATA);
                         written = (Integer) attachment.get(WRITTEN_DATA);
+                        out = (OutputStream) attachment.get(OUTPUT_STREAM);
                     } else {
                         f = File.createTempFile("imap-literal", ".tmp");
                         attachment.put(STORED_DATA, f);
                         written = 0;
                         attachment.put(WRITTEN_DATA, written);
+                        out = new FileOutputStream(f, true);
+                        attachment.put(OUTPUT_STREAM, out);
 
                     }
 
-                    OutputStream out = null;
 
                     try {
                         int amount = Math.min(buffer.readableBytes(), size - written);
-                        out = new FileOutputStream(f, true);
                         buffer.readBytes(out, amount);
-                    } finally {
+                        written += amount;
+                    } catch (Exception e) {
                         IOUtils.closeQuietly(out);
+                        throw e;
                     }
                     // Check if all needed data was streamed to the file.
                     if (written == size) {
+                        IOUtils.closeQuietly(out);
+
                         reader = new NettyStreamImapRequestLineReader(channel, new FileInputStream(f) {
                             /**
                              * Delete the File on close too



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org