提交 f4327351 编写于 作者: A anashaty

8078606: Deadlock in awt clipboard

Reviewed-by: azvegint, bae
上级 d843740b
...@@ -156,7 +156,14 @@ public final class XClipboard extends SunClipboard implements OwnershipListener ...@@ -156,7 +156,14 @@ public final class XClipboard extends SunClipboard implements OwnershipListener
isSelectionNotifyProcessed = true; isSelectionNotifyProcessed = true;
boolean mustSchedule = false; boolean mustSchedule = false;
XToolkit.awtLock();
try {
synchronized (XClipboard.classLock) { synchronized (XClipboard.classLock) {
try {
Thread.sleep(70);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
if (targetsAtom2Clipboard == null) { if (targetsAtom2Clipboard == null) {
targetsAtom2Clipboard = new HashMap<Long, XClipboard>(2); targetsAtom2Clipboard = new HashMap<Long, XClipboard>(2);
} }
...@@ -170,6 +177,9 @@ public final class XClipboard extends SunClipboard implements OwnershipListener ...@@ -170,6 +177,9 @@ public final class XClipboard extends SunClipboard implements OwnershipListener
if (mustSchedule) { if (mustSchedule) {
XToolkit.schedule(new CheckChangeTimerTask(), XClipboard.getPollInterval()); XToolkit.schedule(new CheckChangeTimerTask(), XClipboard.getPollInterval());
} }
} finally {
XToolkit.awtUnlock();
}
} }
private static class CheckChangeTimerTask implements Runnable { private static class CheckChangeTimerTask implements Runnable {
......
...@@ -31,20 +31,24 @@ package sun.awt.X11; ...@@ -31,20 +31,24 @@ package sun.awt.X11;
* common logical ancestor * common logical ancestor
*/ */
class XRootWindow extends XBaseWindow { class XRootWindow extends XBaseWindow {
private static XRootWindow xawtRootWindow = null; private static class LazyHolder {
static XRootWindow getInstance() { private static final XRootWindow xawtRootWindow;
static {
XToolkit.awtLock(); XToolkit.awtLock();
try { try {
if (xawtRootWindow == null) {
xawtRootWindow = new XRootWindow(); xawtRootWindow = new XRootWindow();
xawtRootWindow.init(xawtRootWindow.getDelayedParams().delete(DELAYED)); xawtRootWindow.init(xawtRootWindow.getDelayedParams().delete(DELAYED));
}
return xawtRootWindow;
} finally { } finally {
XToolkit.awtUnlock(); XToolkit.awtUnlock();
} }
} }
}
static XRootWindow getInstance() {
return LazyHolder.xawtRootWindow;
}
private XRootWindow() { private XRootWindow() {
super(new XCreateWindowParams(new Object[] { DELAYED, Boolean.TRUE, super(new XCreateWindowParams(new Object[] { DELAYED, Boolean.TRUE,
EVENT_MASK, XConstants.StructureNotifyMask })); EVENT_MASK, XConstants.StructureNotifyMask }));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册