diff --git a/WHATSNEW b/WHATSNEW index 632253961..99fa30380 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -119,6 +119,9 @@ Fixed bugs: * ZipFile didn't work properly for archives using unicode extra fields rather than UTF-8 filenames and the EFS-Flag. + * Access to DirectoryScanner's default excludes wasn't synchronized. + BigZilla Report 52188. + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java index cb98f35c3..1ece1183a 100644 --- a/src/main/org/apache/tools/ant/DirectoryScanner.java +++ b/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -216,7 +216,7 @@ public class DirectoryScanner * * @see #addDefaultExcludes() */ - private static Set defaultExcludes = new HashSet(); + private static final Set defaultExcludes = new HashSet(); static { resetDefaultExcludes(); } @@ -557,8 +557,10 @@ public class DirectoryScanner * @since Ant 1.6 */ public static String[] getDefaultExcludes() { + synchronized (defaultExcludes) { return (String[]) defaultExcludes.toArray(new String[defaultExcludes .size()]); + } } /** @@ -572,7 +574,9 @@ public class DirectoryScanner * @since Ant 1.6 */ public static boolean addDefaultExclude(String s) { + synchronized (defaultExcludes) { return defaultExcludes.add(s); + } } /** @@ -587,7 +591,9 @@ public class DirectoryScanner * @since Ant 1.6 */ public static boolean removeDefaultExclude(String s) { + synchronized (defaultExcludes) { return defaultExcludes.remove(s); + } } /** @@ -596,10 +602,12 @@ public class DirectoryScanner * @since Ant 1.6 */ public static void resetDefaultExcludes() { - defaultExcludes = new HashSet(); + synchronized (defaultExcludes) { + defaultExcludes.clear(); for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { defaultExcludes.add(DEFAULTEXCLUDES[i]); } + } } /** @@ -1739,11 +1747,11 @@ public class DirectoryScanner public synchronized void addDefaultExcludes() { int excludesLength = excludes == null ? 0 : excludes.length; String[] newExcludes; - newExcludes = new String[excludesLength + defaultExcludes.size()]; + String[] defaultExcludesTemp = getDefaultExcludes(); + newExcludes = new String[excludesLength + defaultExcludesTemp.length]; if (excludesLength > 0) { System.arraycopy(excludes, 0, newExcludes, 0, excludesLength); } - String[] defaultExcludesTemp = getDefaultExcludes(); for (int i = 0; i < defaultExcludesTemp.length; i++) { newExcludes[i + excludesLength] = defaultExcludesTemp[i].replace('/', File.separatorChar)