From 33b7e4299233528015cc4b40713098fb6342b05e Mon Sep 17 00:00:00 2001 From: Peter Reilly Date: Mon, 14 Jul 2003 17:29:17 +0000 Subject: [PATCH] fix for possible race condition on windows git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274818 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/taskdefs/Delete.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index 3b7b9e535..5dfdb3e03 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -459,7 +459,7 @@ public class Delete extends MatchingTask { } else { log("Deleting: " + file.getAbsolutePath()); - if (!file.delete()) { + if (!delete(file)) { String message = "Unable to delete file " + file.getAbsolutePath(); if (failonerror) { @@ -534,7 +534,23 @@ public class Delete extends MatchingTask { //************************************************************************ // protected and private methods //************************************************************************ - + /** + * Attempt to fix possible race condition when deleting + * files on WinXP. If the delete does not work, + * wait a little and try again. + */ + private boolean delete(File f) { + if (! f.delete()) { + try { + Thread.sleep(10); + return f.delete(); + } catch (InterruptedException ex) { + return f.delete(); + } + } + return true; + } + protected void removeDir(File d) { String[] list = d.list(); if (list == null) { @@ -547,7 +563,7 @@ public class Delete extends MatchingTask { removeDir(f); } else { log("Deleting " + f.getAbsolutePath(), verbosity); - if (!f.delete()) { + if (!delete(f)) { String message = "Unable to delete file " + f.getAbsolutePath(); if (failonerror) { @@ -560,7 +576,7 @@ public class Delete extends MatchingTask { } } log("Deleting directory " + d.getAbsolutePath(), verbosity); - if (!d.delete()) { + if (!delete(d)) { String message = "Unable to delete directory " + dir.getAbsolutePath(); if (failonerror) { @@ -586,7 +602,7 @@ public class Delete extends MatchingTask { for (int j = 0; j < files.length; j++) { File f = new File(d, files[j]); log("Deleting " + f.getAbsolutePath(), verbosity); - if (!f.delete()) { + if (!delete(f)) { String message = "Unable to delete file " + f.getAbsolutePath(); if (failonerror) { @@ -606,7 +622,7 @@ public class Delete extends MatchingTask { String[] dirFiles = dir.list(); if (dirFiles == null || dirFiles.length == 0) { log("Deleting " + dir.getAbsolutePath(), verbosity); - if (!dir.delete()) { + if (!delete(dir)) { String message = "Unable to delete directory " + dir.getAbsolutePath(); if (failonerror) {