### Eclipse Workspace Patch 1.0 #P jackrabbit-core Index: src/test/java/org/apache/jackrabbit/core/data/TempFileInputStreamTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/core/data/TempFileInputStreamTest.java (revision 1350224) +++ src/test/java/org/apache/jackrabbit/core/data/TempFileInputStreamTest.java (working copy) @@ -33,7 +33,7 @@ public void testReadPastEOF() throws IOException { File temp = File.createTempFile("test", null); TempFileInputStream.writeToFileAndClose(new ByteArrayInputStream(new byte[1]), temp); - TempFileInputStream in = new TempFileInputStream(temp); + TempFileInputStream in = new TempFileInputStream(temp, false); assertEquals(0, in.read()); assertEquals(-1, in.read()); assertEquals(-1, in.read()); @@ -44,7 +44,7 @@ public void testMarkReset() throws IOException { File temp = File.createTempFile("test", null); TempFileInputStream.writeToFileAndClose(new ByteArrayInputStream(new byte[10]), temp); - InputStream in = new BufferedInputStream(new TempFileInputStream(temp)); + InputStream in = new BufferedInputStream(new TempFileInputStream(temp, false)); in.mark(100); for (int i = 0; i < 10; i++) { assertEquals(0, in.read()); Index: src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java (revision 1349185) +++ src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java (working copy) @@ -85,7 +85,7 @@ TempFileInputStream tempFileInputStream = (TempFileInputStream) stream; // Close it if it is not already closed ... tempFileInputStream.close(); - stream = new TempFileInputStream(tempFileInputStream.getFile()); + stream = new TempFileInputStream(tempFileInputStream.getFile(), true); return true; } catch (Exception e) { log.warn("Failed to create a new TempFileInputStream", e); Index: src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java (revision 1349185) +++ src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java (working copy) @@ -347,7 +347,7 @@ } else if (STORE_TEMP_FILE.equals(storeStream)) { File temp = moveToTempFile(in); long length = temp.length(); - wrapper = new StreamWrapper(new TempFileInputStream(temp), length); + wrapper = new StreamWrapper(new TempFileInputStream(temp, true), length); } else { throw new DataStoreException("Unsupported stream store algorithm: " + storeStream); } @@ -578,7 +578,7 @@ } else if (copyWhenReading) { // If we copy while reading, create a temp file and close the stream File temp = moveToTempFile(stream); - stream = new BufferedInputStream(new TempFileInputStream(temp)); + stream = new BufferedInputStream(new TempFileInputStream(temp, false)); DbUtility.close(rs); } else { stream = new BufferedInputStream(stream); Index: src/main/java/org/apache/jackrabbit/core/data/db/TempFileInputStream.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/data/db/TempFileInputStream.java (revision 1349185) +++ src/main/java/org/apache/jackrabbit/core/data/db/TempFileInputStream.java (working copy) @@ -39,6 +39,7 @@ private final File file; private boolean closed; + private boolean delayedResourceCleanup = true; /** * Copy the data to a file and close the input stream afterwards. @@ -61,10 +62,12 @@ * Deleting is only attempted once. * * @param file the temporary file + * @param delayedResourceCleanup */ - public TempFileInputStream(File file) throws FileNotFoundException { + public TempFileInputStream(File file, boolean delayedResourceCleanup) throws FileNotFoundException { super(new BufferedInputStream(new FileInputStream(file))); this.file = file; + this.delayedResourceCleanup = delayedResourceCleanup; } public File getFile() { @@ -85,6 +88,9 @@ public void close() throws IOException { if (!closed) { in.close(); + if (!delayedResourceCleanup) { + deleteFile(); + } closed = true; } }