From 69749c97db51b8c7116acc14cda415ad2d39eac0 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sun, 19 Jan 2014 22:08:35 +0100 Subject: Prevent concurrent writings of the same file --- main/src/cgeo/geocaching/files/LocalStorage.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index 133f39a..3dcb200 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -275,15 +275,18 @@ public final class LocalStorage { return false; } + try { try { - final FileOutputStream fos = new FileOutputStream(targetFile); + final File tempFile = File.createTempFile("download", null, targetFile.getParentFile()); + final FileOutputStream fos = new FileOutputStream(tempFile); final boolean written = copy(inputStream, fos); fos.close(); - if (!written) { - FileUtils.deleteIgnoringFailure(targetFile); + if (written) { + return tempFile.renameTo(targetFile); } - return written; + FileUtils.deleteIgnoringFailure(tempFile); + return false; } finally { IOUtils.closeQuietly(inputStream); } -- cgit v1.1