提交 9a9a5e05 编写于 作者: S serb

7016528: Deadlock during mutual initialization of DataTransferer and...

7016528: Deadlock during mutual initialization of DataTransferer and DataTransferer$DataFlavorComparator
Reviewed-by: dav, art, denis
上级 762f24a2
...@@ -29,12 +29,10 @@ import java.awt.AWTError; ...@@ -29,12 +29,10 @@ import java.awt.AWTError;
import java.awt.EventQueue; import java.awt.EventQueue;
import java.awt.Image; import java.awt.Image;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorMap; import java.awt.datatransfer.FlavorMap;
import java.awt.datatransfer.FlavorTable; import java.awt.datatransfer.FlavorTable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable; import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.datatransfer.UnsupportedFlavorException;
...@@ -66,8 +64,6 @@ import java.lang.reflect.InvocationTargetException; ...@@ -66,8 +64,6 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.security.PrivilegedActionException; import java.security.PrivilegedActionException;
...@@ -171,7 +167,26 @@ public abstract class DataTransferer { ...@@ -171,7 +167,26 @@ public abstract class DataTransferer {
*/ */
public static final DataFlavor javaTextEncodingFlavor; public static final DataFlavor javaTextEncodingFlavor;
private static SortedSet standardEncodings; /**
* Lazy initialization of Standard Encodings.
*/
private static class StandardEncodingsHolder {
private static final SortedSet standardEncodings = load();
private static SortedSet load() {
final Comparator comparator =
new CharsetComparator(IndexedComparator.SELECT_WORST);
final SortedSet tempSet = new TreeSet(comparator);
tempSet.add("US-ASCII");
tempSet.add("ISO-8859-1");
tempSet.add("UTF-8");
tempSet.add("UTF-16BE");
tempSet.add("UTF-16LE");
tempSet.add("UTF-16");
tempSet.add(getDefaultTextCharset());
return Collections.unmodifiableSortedSet(tempSet);
}
}
/** /**
* Tracks whether a particular text/* MIME type supports the charset * Tracks whether a particular text/* MIME type supports the charset
...@@ -509,18 +524,7 @@ public abstract class DataTransferer { ...@@ -509,18 +524,7 @@ public abstract class DataTransferer {
* non-standard, character sets are not included. * non-standard, character sets are not included.
*/ */
public static Iterator standardEncodings() { public static Iterator standardEncodings() {
if (standardEncodings == null) { return StandardEncodingsHolder.standardEncodings.iterator();
TreeSet tempSet = new TreeSet(defaultCharsetComparator);
tempSet.add("US-ASCII");
tempSet.add("ISO-8859-1");
tempSet.add("UTF-8");
tempSet.add("UTF-16BE");
tempSet.add("UTF-16LE");
tempSet.add("UTF-16");
tempSet.add(getDefaultTextCharset());
standardEncodings = Collections.unmodifiableSortedSet(tempSet);
}
return standardEncodings.iterator();
} }
/** /**
...@@ -2398,7 +2402,9 @@ search: ...@@ -2398,7 +2402,9 @@ search:
public static DataFlavor[] setToSortedDataFlavorArray(Set flavorsSet) { public static DataFlavor[] setToSortedDataFlavorArray(Set flavorsSet) {
DataFlavor[] flavors = new DataFlavor[flavorsSet.size()]; DataFlavor[] flavors = new DataFlavor[flavorsSet.size()];
flavorsSet.toArray(flavors); flavorsSet.toArray(flavors);
Arrays.sort(flavors, defaultFlavorComparator); final Comparator comparator =
new DataFlavorComparator(IndexedComparator.SELECT_WORST);
Arrays.sort(flavors, comparator);
return flavors; return flavors;
} }
...@@ -2455,11 +2461,6 @@ search: ...@@ -2455,11 +2461,6 @@ search:
return new ArrayList(); return new ArrayList();
} }
private static CharsetComparator defaultCharsetComparator =
new CharsetComparator(IndexedComparator.SELECT_WORST);
private static DataFlavorComparator defaultFlavorComparator =
new DataFlavorComparator(IndexedComparator.SELECT_WORST);
/** /**
* A Comparator which includes a helper function for comparing two Objects * A Comparator which includes a helper function for comparing two Objects
* which are likely to be keys in the specified Map. * which are likely to be keys in the specified Map.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册