Author: norman
Date: Sun Apr 11 10:43:20 2010
New Revision: 932865
URL: http://svn.apache.org/viewvc?rev=932865&view=rev
Log:
Make sure all file descriptors are really closed when object is disposed
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
james/server/trunk/spoolmanager/src/main/java/org/apache/james/FileSpoolMessageStore.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java?rev=932865&r1=932864&r2=932865&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
Sun Apr 11 10:43:20 2010
@@ -33,6 +33,8 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
/**
* Takes an input stream and creates a repeatable input stream source
@@ -48,6 +50,9 @@ public class MimeMessageInputStreamSourc
extends MimeMessageSource
implements Disposable {
+ private final List<InputStream> streams = new ArrayList<InputStream>();
+
+
/**
* A temporary file used to hold the message stream
*/
@@ -141,7 +146,9 @@ public class MimeMessageInputStreamSourc
* @return a <code>BufferedInputStream</code> containing the data
*/
public synchronized InputStream getInputStream() throws IOException {
- return new SharedFileInputStream(file);
+ SharedFileInputStream in = new SharedFileInputStream(file);
+ streams.add(in);
+ return in;
}
/**
@@ -167,6 +174,14 @@ public class MimeMessageInputStreamSourc
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
public void dispose() {
+ // explicit close all streams
+ for (int i = 0; i < streams.size(); i++) {
+ try {
+ streams.get(i).close();
+ } catch (IOException e) {
+ // ignore on dispose
+ }
+ }
try {
if (file != null && file.exists()) {
file.delete();
Modified:
james/server/trunk/spoolmanager/src/main/java/org/apache/james/FileSpoolMessageStore.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/FileSpoolMessageStore.java?rev=932865&r1=932864&r2=932865&view=diff
==============================================================================
---
james/server/trunk/spoolmanager/src/main/java/org/apache/james/FileSpoolMessageStore.java
(original)
+++
james/server/trunk/spoolmanager/src/main/java/org/apache/james/FileSpoolMessageStore.java
Sun Apr 11 10:43:20 2010
@@ -19,11 +19,14 @@
package org.apache.james;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.mail.util.SharedFileInputStream;
import org.apache.james.core.MimeMessageSource;
import org.apache.james.lifecycle.Disposable;
@@ -107,6 +110,7 @@ public class FileSpoolMessageStore imple
private File file;
private String id;
+ private List<SharedFileInputStream> streams = new
ArrayList<SharedFileInputStream>();
private FileMimeMessageSource(File file) throws IOException {
this.file = file;
@@ -114,8 +118,10 @@ public class FileSpoolMessageStore imple
}
@Override
- public InputStream getInputStream() throws IOException {
- return new FileInputStream(file);
+ public synchronized InputStream getInputStream() throws IOException {
+ SharedFileInputStream input = new SharedFileInputStream(file);
+ streams.add(input);
+ return input;
}
@Override
@@ -127,8 +133,19 @@ public class FileSpoolMessageStore imple
* (non-Javadoc)
* @see org.apache.james.lifecycle.Disposable#dispose()
*/
- public void dispose() {
- file.delete();
+ public synchronized void dispose() {
+ for (int i = 0; i < streams.size(); i++) {
+ SharedFileInputStream in = streams.get(i);
+ try {
+ in.close();
+ } catch (IOException e) {
+ // ignore on dispose
+ }
+ }
+ if (file != null) {
+ file.delete();
+ file = null;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]